Бросить тень поверх LinearLayout с помощью Android: высота
У меня есть этот LinearLayout
, который будет помещен в нижней части макета активности. Я хочу, чтобы этот LinearLayout
имел высоту 4dp, как и верхняя панель инструментов, однако, поскольку android:elevation
помещает тень под компонент ui, и этот конкретный компонент (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>
![введите описание изображения здесь]()
Есть ли способ, используя elevation
, чтобы поместить тень поверх компонента ui?
Спасибо заранее!
Ответы
Ответ 1
Теоретически вы не можете делать это с помощью android:elevation
в том смысле, что вы не можете выбрать направление, в котором будет тень.
Существует два решения.
1. Вводимый коэффициент
Вы могли бы, например, поставить ImageView
прямо над вашим макетом и установить android:src="@drawable/shadow"
. Это должен быть вертикальный GradientDrawable
, определенный в XML, как описано здесь.
2. Обход
В то время как большая часть тени фактически находится под представлением, тонкая тень также выше. Обходной путь может использовать очень высокое значение для elevation
, например 40dp
: нижняя часть будет скрыта из-за вашего макета, а верхняя часть будет расширяться и будет выглядеть как общая тень.
В любом случае у вас нет контроля над значением высоты в dp
, в том смысле, что вы не можете быть уверены, что ваша тень эквивалентна той, что была сделана с помощью android:elevation=4dp
.
Ответ 2
используйте как.:
<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>
Ответ 3
Попробуйте это, я не могу установить фон через xml, тогда я попробовал программный способ решить эту проблему, и я отлично справляюсь с этим, если сталкиваюсь с проблемой тени show в Linear Layout
lprofile.setBackgroundResource(R.drawable.background_with_shadow);
lprofile - это мой рефлекс линейного макета, а background_with_shadow - это xml для применения тени. Я надеюсь, что я захочу для реквизита ur... thank u..