Android记录7--LinearLayout设置selector并将状态传递到子view
    
  
      
      
     
    
      
        在LinearLayout中,如果同时为LinearLayout与子TextView设置selector,是可以实现的,代码如下
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 |  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/ll_company"
 android:layout_width="match_parent"
 android:layout_height="102dp"
 android:layout_marginStart="25dp"
 android:layout_marginEnd="25dp"
 android:layout_marginBottom="20dp"
 android:background="@drawable/selector_company"
 android:clickable="true"
 android:focusable="true"
 android:focusableInTouchMode="true">
 
 <TextView
 android:id="@+id/tv_company_name"
 android:layout_width="wrap_content"
 android:layout_height="match_parent"
 android:layout_marginStart="20dp"
 android:drawableStart="@mipmap/company_uncheck"
 android:drawablePadding="20dp"
 android:gravity="center_vertical"
 android:text="test"
 android:textColor="@drawable/selector_company_text"
 android:textSize="19sp" />
 </LinearLayout>
 
 | 
selector文件为:
selector_company.xml:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | <?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:drawable="@drawable/company_selected" android:state_focused="true" />
 <item android:drawable="@drawable/company_selected" android:state_checked="true" />
 <item>
 <shape>
 <corners android:radius="15dp" />
 <solid android:color="@color/white" />
 </shape>
 </item>
 </selector>
 
 | 
selector_company_text.xml:
| 12
 3
 4
 5
 6
 
 | <?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_focused="true" android:color="@color/white" />
 <item android:state_pressed="true" android:color="@color/white" />
 <item android:color="@color/title" android:state_checked="false" />
 </selector>
 
 | 
此时,textview可以响应pressed状态,但是!!
无法与LinearLayout一样保持focused状态
##解决办法:
为TextView加上
| 1
 | android:duplicateParentState="true"
 | 
android:duplicateParentState指的是当前控件是否跟随父控件的(点击、焦点等)状态
 
PS:网上有说用RadioGroup来实现,但是不适用于用RecyclerView展示的LinearLayout
PS2:尝试过使用CheckBox,但是重复点击会有checked跟unchecked状态重复切换,不适用
      
     
    
      
  
  
    
      
      
        
        前Android/Vue开发,现Infra从业人员,主营监控/AWS