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

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

В моем приложении я установил фоновое изображение верхнего уровня 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>
4b9b3361

Ответ 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, который также повлияет на кнопки.