在Android中经常使用selector来设置view的背景,可以在代码中通过设置view的selected状态来控制view的背景。
首先在布局文件中写上
<LinearLayout
android:id="@+id/loan_step1_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal"
android:background="@drawable/selector_loan_step1">
<ImageView
android:id="@+id/loan_step1_icon"
android:layout_width="46px"
android:layout_height="46px"
android:background="@drawable/selector_loan_step1_icon"
/>
</LinearLayout>
可以看出LinearLayout的background和ImageView的background都设置了selector
然后我们在代码中控制selected状态
loanStep1Icon.setSelected(false);
loanStep1Bg.setSelected(true);
发现ImageView和LinearLayout显示的都是selected = true的背景图片
而一下代码
loanStep1Bg.setSelected(true);
loanStep1Icon.setSelected(false);
显示的是LinearLayout selected = true的背景,ImageView selected = false的背景
出现这个现象的原因在于,LinearLayout是ImageView的父布局,对LinearLayout设置selected状态相当于对ImageView设置了selected状态
所以这2行代码颠倒了顺序,执行结果就不一样