Подтвердить что ты не робот

Простая макет теней в Android

Итак, я искал в Интернете способ отображения простой тени для макета, но нет подходящего способа сделать это.
Все, что я нашел, было обходным путем, когда вы создавали макет позади того, на который хотите применить тень, а затем настраивайте его на прозрачность и некоторые другие вещи.

Есть ли другой способ иметь простую макетную тень, не добавляя полностью новый макет?

4b9b3361

Ответ 1

Я смог придумать решение этой проблемы, и добавив View ниже нашего знаменитого макета, отображая градиент от одного цвета к другому.
Обычно цвет Первый будет своего рода темно-сероватым, а Второй - цвет фона (в моем случае, у меня будет светло-серый фон, чтобы он не был полностью белым).

Layout + View

xml будет выглядеть следующим образом:

...
<LinearLayout
    android:id="@+id/headerLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@drawable/headerImage"
        android:orientation="vertical" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="5dip"
        android:background="@drawable/drop_shadow" >
    </View>
</LinearLayout>
...

drop_shadow.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">    
    <gradient
        android:startColor="#404040"
        android:endColor="#F1F1F1"
        android:angle="270"
        >
    </gradient>
</shape>

Я надеюсь, что это поможет;)

Ответ 2

Вы можете использовать класс android.support.v4.view.ViewCompat, который устанавливает возвышение представления с использованием статического метода setElevation. Класс является помощником для доступа к функциям, представленным после уровня API 4, с обратной совместимостью.

Базовая высота находится в пикселях, например

View mFab = (View) findViewById(R.id.floating_button);
ViewCompat.setElevation(mFab, 12);

Ответ 3

Для леденцов и выше вы можете использовать отметку.

Для более старых версий:

Вот ленивый взломать: http://odedhb.blogspot.com/2013/05/android-layout-shadow-without-9-patch.html

(toast_frame не работает на KitKat, тень удалена из тостов)

просто используйте:

android:background="@android:drawable/toast_frame"

или

android:background="@android:drawable/dialog_frame"

в качестве фона

примеры:

<TextView
        android:layout_width="fill_parent"
        android:text="I am a simple textview with a shadow"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:padding="16dp"
        android:textColor="#fff"
        android:background="@android:drawable/toast_frame"
        />

и с другим цветом bg:

<LinearLayout
        android:layout_height="64dp"
        android:layout_width="fill_parent"
        android:gravity="center"
        android:background="@android:drawable/toast_frame"
        android:padding="4dp"
        >
    <Button
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="Button shadow"
            android:background="#33b5e5"
            android:textSize="24sp"
            android:textStyle="bold"
            android:textColor="#fff"
            android:layout_gravity="center|bottom"
            />

</LinearLayout>