Android自定义视图背景选择

时间:2011-11-23 08:56:35

标签: android background selection custom-view

我有自定义视图:

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 :(得分:0)

您应该将父级状态传递给自定义视图的子级。使用:

android:duplicateParentState="true"

注意:如果您的自定义视图具有高级层次结构,例如A-&gt; B-&gt; C,并且您希望“C”视图处理状态行为,则应将duplicateParentState设置为“A”和“B”视图。