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去根据不同的状态,曲线是不同的效果
新人学习中,也不太会总结,有做的不对的地方希望各位大神指出,谢谢。