我正在尝试更好地理解在重构某些“选择突出显示”代码时出现的以下情况(以利用着色)。
有一个列表,其中填充了适配器CodebookAdapter
,其中每个项目的定义为:
CodebookAdapter列表项目布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="#FFFFFFFF">
<ImageView
android:id="@+id/item_icon_iv"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_gravity="center_vertical" />
<TextView
android:id="@+id/item_header_tv"
android:layout_width="match_parent"
android:layout_height="20dp"
android:textColor="#FF000000"
android:textSize="14dp"/>
<!--android:background="#FFFFFFFF"-->
</LinearLayout>
以下方法HiliteCodeItem()
将TextView
,item_header_tv
设置为已选择。
我先将background-tint
设置在list-item
本身,然后放在随附的TextView
上(以避免意外突出显示整个布局):
// option 1 - item_header_tv's background can be omitted/null, highlights ok
/////////////////////////////////////////////////////////////
v.Background.SetTintList(_csl);
// option 2 - item_header_tv's background cannot be omitted/null
/////////////////////////////////////////////////////////////
tv.Background.SetTintList(_csl);
为什么在选项2 中必须显式设置背景(或者tv.Background.SetTintList(_csl);
抛出null ex),但在选项1 {{ 1}}的背景是否突出显示?
封闭列表项的LinearLayout是否对item_header_tv
的背景进行了空检查并实例化了一个?
TextView
答案 0 :(得分:1)
为什么在选项2中必须显式设置背景(或者tv.Background.SetTintList(_csl);抛出null ex),但是在选项1中item_header_tv的背景是否突出显示?
第一个有效,因为您已将android:background="#FFFFFFFF"
设置为LinearLayout
,代码v = _._inflater.Inflate(_listItemRes, parent, false);
指向此LinearLayout
。所以它的背景不会被省略/ null。
Background
如果您想SetTintList
,则不能为空,第二行不起作用,因为Background
的{{1}}为空。
顺便说一下,TextView v
等控件默认设置为Button
,您无需指定Background
属性即可使用Background
。