Почему дочерние представления наследуют альфа-значение от родительского макета
В моем приложении я установил фоновое изображение верхнего уровня linearlayout, а затем, чтобы затухать фон, я установил его альфа для .2, но это создает нечетную проблему в том, что он также устанавливает альфу для всех дочерних элементов макета также, даже если я явно определяю другое значение альфа-данных у детей.
Можно ли установить альфа-значение родителя и не повлиять на значение дочернего элемента?
Каков правильный способ установки альфы на верхнем уровне, не влияя на альфу на то, что видит детей?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll1"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:background="@drawable/bg"
android:alpha="0.2">
<Button android:id="@+id/btn1"
android:text="Set 1"
android:layout_width="300px"
android:layout_height="150px"
android:layout_gravity="center"
android:background="@drawable/button1"
android:tag="1"
android:alpha="1"/>
<Button android:id="@+id/btn2"
android:text="Set 2"
android:layout_width="300px"
android:layout_height="150px"
android:layout_gravity="center"
android:background="@drawable/button2"
android:tag="2"/>
</LinearLayout>
Ответы
Ответ 1
Именно так оно и должно работать.
Почему бы просто не изменить альфа вашего фонового рисунка "@drawable/bg" на 0.2?
В качестве альтернативы попробуйте FrameLayout с этой базовой структурой:
<FrameLayout>
<ImageView
android:background="@drawable/bg"
android:alpha="0.2" />
<LinearLayout>
<Button />
<Button />
</LinearLayout>
</FrameLayout>
Ответ 2
Один из способов - установить значение альфа в хеш-коде для цвета, то есть вместо #RRGGBB использовать #AARRGGBB. Это гарантирует, что значение альфа не наследуется.
Ответ 3
Вам нужно будет использовать функцию frameelayout. В противном случае ваша кнопка будет увеличена с помощью linearlayout с набором aplha, который также повлияет на кнопки.