Android - ExpandableListView更改子项的背景

时间:2009-12-14 21:39:18

标签: android background customization expandablelistview

我在我的应用中使用ExpandableListView,我从用户那里得到的一个投诉是 当List项目展开时,很难在视觉上区分孩子的位置 项目结束,下一个组项目开始。

所以我想将子List项的背景更改为不同的阴影。

到目前为止,我所做的野蛮尝试都是基于直接更改子View项内部元素的背景颜色和文本,但这会导致徘徊和亮点丢失。所以我的问题是 - 实现上述目标的好策略是什么?

我尝试了stylesselectors但真正让我失望的是,如果我更改了子项目的背景,那么我需要为所有焦点/启用组合添加selectors等等。我试图用它来覆盖一件事。

是否有一种方法可以继承父style并仅为非焦点启用的子项设置background并保留其他styles

3 个答案:

答案 0 :(得分:5)

好。这对我有用:

  1. 在项目的res/drawable目录
  2. 中创建list_background.xml
  3. 将子项目的顶级布局的背景值设置为上面的drawable。如果您现在正在摸不着头脑 - 我指的是在ExpandableListAdapter#getChildView
  4. 中创建可扩展列表的子视图时使用的xml布局文件

    这是完整的可绘制文件

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:state_enabled="true"
            android:drawable="@drawable/list_highlight_active" />
        <item android:state_enabled="true" android:state_selected="true" 
            android:state_window_focused="true"
        android:drawable="@drawable/list_highlight_inactive" />
        <item android:state_enabled="true" android:state_window_focused="true" 
            android:drawable="@color/item_body" />
        <item android:drawable="@color/item_body" />
    </selector>
    

    我不得不将list_highlight_active.xmllist_highlight_inactive.xml/android-sdk-windows-1.6_r1/platforms/android-1.5/data/res/drawable复制到我项目的drawable目录中。 @color/item_body只是一片灰色

答案 1 :(得分:0)

我刚刚发现了一种“有点”设置背景颜色而无需跳过选择器箍的方法。

正如您所指出的,将背景设置为纯色会消除选择器高光,因为新的背景颜色会遮挡它。 Droidin有什么是正常的解决方案:为您自己的背景选择器提供您想要的确切颜色。至少可以说是痛苦。

但如果你想要的只是一点色差,那么有一种更简单的方法:alpha混合。使用Alpha值设置背景颜色。例如,将background设置为“#BBFFFFFF”。前两位数字表示alpha级别。它将全部混合,因此背景将不是纯白色,选择高光将不是正常的亮橙色,但孩子将是不同的颜色,亮点仍然有效。双赢。

答案 2 :(得分:0)

我搜索类似的解决方案。 您可以尝试在适配器方法getChieldView上获取父View。 我认为这个父母是你所有chields的父视图。 并将资源背景设置为此父级。 我这样做:

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,  View convertView, ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.fa_report_sub_item, null);
        View parentGroup=(View) convertView.getParent();
        parentGroup.setBackgroundResource(R.drawable.fa_summ_report_main_item);
    }