Выбор пользовательского фона для Android - PullRequest
2 голосов
/ 23 ноября 2011

У меня есть пользовательский вид:

public class MyView extends RelativeLayout {

    private LayoutInflater inflater;

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        inflater = LayoutInflater.from(context);
        inflater.inflate(R.layout.my_view, this);
    }
}

с xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"/>

У меня также есть селектор для фона:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
           android:drawable="@drawable/top_press" /> <!-- pressed -->
     <item android:drawable="@drawable/top_idle" /> <!-- default -->
 </selector>

Когда я использую селектор в качестве фона, он не работает:

<com.example.MyView style="@style/someStyle" 
    android:background="@drawable/item_selector_top" android:clickable="true"/>

Однако, когда я помещаю фон из внутреннего xml, он работает:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:background="@drawable/item_selector_top"/>

Кто-нибудь знает почему?

1 Ответ

0 голосов
/ 23 апреля 2012

Вы должны передать состояние родителя детям вашего пользовательского представления.Используйте:

android:duplicateParentState="true"

Примечание: если ваше пользовательское представление имеет расширенную иерархию, такую ​​как A-> B-> C, и вы хотите, чтобы представление «C» обрабатывало поведение состояния, вы должны поместить duplicateParentState в «A» и «B».'просмотров тоже.

...