zoukankan      html  css  js  c++  java
  • 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去根据不同的状态,曲线是不同的效果

  • 相关阅读:
    linux下ssh端口的修改和登录
    linux找回密码
    XAMPP命令之LAMPP
    VirtualBox 复制vdi文件和修改vdi的uuid
    探讨PHP页面跳转几种实现技巧
    CSS盒模型和margin重叠
    8--数组旋转
    9--斐波那契数列
    7--动态规划
    6--树的遍历
  • 原文地址:https://www.cnblogs.com/819158327fan/p/4889500.html
Copyright © 2011-2022 走看看