着色子视图和包含ViewGroup之间的区别

时间:2017-10-31 19:29:54

标签: android android-layout xamarin.android

我正在尝试更好地理解在重构某些“选择突出显示”代码时出现的以下情况(以利用着色)。

有一个列表,其中填充了适配器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()TextViewitem_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

1 个答案:

答案 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