Почему дочерние представления наследуют альфа-значение от родительского макета - PullRequest
12 голосов
/ 13 сентября 2011

В моем приложении я установил фоновое изображение линейного слоя верхнего уровня, а затем, чтобы затемнить фон, я установил альфа на .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>

Ответы [ 3 ]

21 голосов
/ 13 сентября 2011

Именно так оно и должно работать.

Почему бы просто не изменить альфа-фон вашего нарисованного фона "@ drawable / bg" на 0,2?

В качестве альтернативы, попробуйте FrameLayout сэта базовая структура:

<FrameLayout>
    <ImageView
        android:background="@drawable/bg" 
        android:alpha="0.2" />
    <LinearLayout>
        <Button />
        <Button />
    </LinearLayout>     
</FrameLayout>
3 голосов
/ 01 ноября 2015

Один из способов - установить альфа-значение в хэш-коде для цвета, т.е. вместо #RRGGBB используйте #AARRGGBB. Это гарантирует, что альфа-значение не наследуется.

1 голос
/ 13 сентября 2011

Вам нужно будет использовать framelayout. в противном случае ваша кнопка заключена в линейное расположение с набором aplha, которое также повлияет на кнопки.

...