it-roy-ru.com

Отбрасывать тень поверх LinearLayout с помощью Android: высота

У меня есть эта LinearLayout, которая будет размещена в нижней части макета активности. Я хочу, чтобы этот LinearLayout имел высоту 4dp, как и на верхней панели инструментов, однако, поскольку Android:elevation размещает тень под компонентом пользовательского интерфейса, и этот конкретный компонент (linearLayout) будет в нижней части экрана, я выиграл ' не вижу никакой высоты вообще ..

Это мой код LinearLayout и его изображение с реализованным повышением по умолчанию:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:weightSum="3"
    Android:background="@Android:color/transparent"
    Android:orientation="horizontal"
    Android:elevation="4dp"
    Android:layout_alignParentBottom="true">

    <ImageButton
        Android:id="@+id/playButton"
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        Android:scaleType="center"
        Android:clickable="true"
        Android:background="@drawable/bottom_toolbar_menu_selector"
        Android:src="@drawable/ic_play"
        style="?android:attr/borderlessButtonStyle" />

    <ImageButton
        Android:id="@+id/stopButton"
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        Android:scaleType="center"
        Android:clickable="true"
        Android:background="@drawable/bottom_toolbar_menu_selector"
        Android:src="@drawable/ic_stop"
        style="?android:attr/borderlessButtonStyle" />

    <ImageButton
        Android:id="@+id/bookmarkButton"
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        Android:scaleType="center"
        Android:clickable="true"
        Android:background="@drawable/bottom_toolbar_menu_selector"
        Android:src="@drawable/ic_bookmark"
        style="?android:attr/borderlessButtonStyle" />

</LinearLayout>

 enter image description here

Есть ли способ, используя elevation, чтобы поместить тень поверх компонента пользовательского интерфейса?Заранее спасибо!

24
yat0

Теоретически вы не можете сделать это с помощью Android:elevation, в том смысле, что вы не можете выбрать направление, где будет отбрасываться тень.

Есть два решения.

1. Drawables

Например, вы можете поместить ImageView прямо над макетом и установить Android:src="@drawable/shadow". Это должна быть вертикальная GradientDrawable, определенная в XML, как объяснено здесь .

2. Обходной путь

Хотя большая часть тени на самом деле находится ниже вида, тонкая тень также находится выше. Обходное решение может использовать очень высокое значение для elevation, например 40dp: нижняя часть будет скрыта из-за вашего макета, а верхняя будет расширена и будет выглядеть как общая тень.

В любом случае вы не можете контролировать значение высоты в dp, в том смысле, что вы не можете быть уверены, что ваша тень эквивалентна тени, отбрасываемой Android:elevation=4dp.

31
natario

использовать как;

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="205dp"
    Android:background="@color/white"
    Android:orientation="horizontal">

    <RelativeLayout
        Android:layout_width="match_parent"
        Android:layout_height="200dp"
        Android:layout_marginTop="-5dp"
        Android:background="@color/white"
        Android:elevation="3dp"
        Android:paddingTop="5dp">

        // CHILD VIEWS
    </RelativeLayout>
</LinearLayout>
1
semih

Добавьте этот код выше вида, в котором вы хотите высоту возвышения или добавьте Android:layout_marginTop="-4dp" и добавьте ниже вид сверху 

<Android.support.v7.widget.CardView
    Android:layout_width="match_parent"
    Android:layout_height="0.01dp"
    Android:layout_below="@+id/scrollbar"
    app:cardBackgroundColor="@Android:color/transparent"
    app:cardCornerRadius="0dp"
    app:cardElevation="@dimen/dp_4" />
0
Vishnu Kant Agarwal

Попробуйте это, я не могу установить фон с помощью XML, затем я попробовал программный способ решить эту проблему, и я отлично справляюсь с этим, если сталкиваюсь с проблемой при отображении тени в Linear Layout 

lprofile.setBackgroundResource(R.drawable.background_with_shadow);

lprofile - это моя ссылка на Linear layout, а background_with_shadow - это xml для применения тени, я надеюсь, что я сделаю это для вашего требования ... спасибо ..

0
user7957410