Android 实现子View的状态跟随父容器的状态

      最近自学着做东西,需要做一个效果,就是我ListView的Item点击下或者选中的时候,我Item里面的各个组件的状态要和我Item的状态保持一直,这样我就可以用XML,去根据组件的不同状态去实现不同的效果。那么,我发现了XML的一条属性

< android:duplicateParentState="true" />

      这条属性是什么意思呢? 我个人根据字面理解为:(duplicate)复制(Parent)父母(State)状态-----即:复制父容器的状态,也就是说,这条属性是需要加在子组件上的,带有这个属性的子组件,他的状态会和父容器的状态一样。

 

l例如,这是我ListView的Item的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="100dp">
    <!-- android:duplicateParentState="true"  跟随父组件的状态变化而变化 -->
    <TextView
        android:id="@+id/tv_showBackColor_lvItem"
        android:layout_width="5dp"
        android:layout_height="match_parent"
        android:background="@drawable/tv_show_backcolor_lv_menu"
        android:duplicateParentState="true"/>
    <ImageView
        android:id="@+id/iv_showIcon_lvItem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="20dp"
        android:layout_marginStart="20dp"
        android:duplicateParentState="true"/>
    <TextView
        android:id="@+id/tv_showInfo_lvItem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试测试"
        android:textSize="20sp"
        android:layout_gravity="center_vertical"
        android:paddingTop="20dp"
        android:paddingBottom="20dp"
        android:textColor="@drawable/tv_show_textcolor_lv_menu"
        android:layout_marginLeft="30dp"
        android:duplicateParentState="true"/>
</LinearLayout>

 那么这时候,我的TextView和ImageView都带有这条属性,所以他们的状态就和我ListView的Item的状态一致,那么我就可以用XML去实现效果

         drawable 的代码

1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3     <item android:state_focused="true" android:drawable="@color/tv_showColor_lv_menuLeft" /> <!-- focused -->
4     <item android:state_pressed="true" android:drawable="@color/tv_showColor_lv_menuLeft" /> <!-- pressed -->
5     <item android:state_selected="true" android:drawable="@color/tv_showColor_lv_menuLeft" /> <!-- pressed -->
6     <item android:drawable="@color/tv_showColor_lv_menuLeft_enable" /> <!-- default -->
7 </selector>

这个时候,就可以根据Item的状态  ,去让TextView和ImageView去根据不同的状态,曲线是不同的效果

posted @ 2015-10-18 14:38  灬布衣丶公爵丨  阅读(2588)  评论(0编辑  收藏  举报