代码之家  ›  专栏  ›  技术社区  ›  Bostone

Android-ExpandableListView更改子项的背景

  •  3
  • Bostone  · 技术社区  · 15 年前

    我正在使用 ExpandableListView 在我的应用程序中,我收到的用户投诉之一是 List 项目已展开,很难从视觉上区分孩子在哪里

    所以我想改变孩子的背景 不同颜色的物品。

    到目前为止,我所做的残酷尝试都是基于直接改变孩子体内元素的背景颜色和文本 View 但这会导致悬停和高光丢失。所以我的问题是——实现上述目标的好策略是什么?

    我试过了 styles selectors 但真正让我沮丧的是,若我更改了子项的背景,那个么我需要添加 对于焦点/启用等的所有组合,当我试图覆盖一件事情时。

    style 设定 background 仅适用于非重点、已启用的子项和其他 风格

    3 回复  |  直到 12 年前
        1
  •  5
  •   Bostone    15 年前

    好。以下是对我有效的方法:

    1. 在项目中创建list_background.xml res/drawable 目录
    2. ExpandableListAdapter#getChildView

    这是完整的可绘制文件

    <?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.xml list_highlight_inactive.xml 从…起 /android-sdk-windows-1.6_r1/platforms/android-1.5/data/res/drawable 到我的项目的可绘制目录。 @color/item_body 只是一片灰色

        2
  •  0
  •   Walt Armour    14 年前

    我刚刚发现了一种方法,可以“稍微”设置背景色,而不必跳过选择器框。

    正如您所注意到的,将背景设置为纯色会清除选择器高光,因为新的背景色会使其模糊。Droidin有一个正常的解决方案:提供你自己的背景选择器和你想要的颜色。至少可以说,这是一种痛苦。

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

        3
  •  0
  •   Sergey Sheleg    10 年前

    我寻找类似的解决方案。 我认为这个家长是你所有孩子的家长观。 并将背景从资源设置为此父级。

    @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);
        }