【问题标题】:Android - ExpandableListView change background for child itemsAndroid - ExpandableListView 更改子项的背景
【发布时间】:2009-12-14 21:39:17
【问题描述】:

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

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

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

我尝试了stylesselectors,但真正让我烦恼的是,如果我更改子项目的背景,那么我需要为所有焦点/启用等组合添加selectors。当我想做的所有事情时它覆盖一个单一的东西。

有没有办法继承父 style 并将 background 设置为仅用于非聚焦、启用的子项目而其他 styles 保留?

【问题讨论】:

    标签: android background customization expandablelistview


    【解决方案1】:

    嗯。这对我有用:

    1. 在项目的res/drawable 目录中创建list_background.xml
    2. 将您的子项目的顶级布局的背景值设置为上面的可绘制对象。如果您此时正在摸不着头脑 - 我指的是当您在 ExpandableListAdapter#getChildView 中创建可扩展列表的子视图时使用的 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 只是一个灰色阴影

    【讨论】:

      【解决方案2】:

      我刚刚发现了一种“稍微”设置背景颜色的方法,而无需跳过选择框。

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

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

      【讨论】:

        【解决方案3】:

        我正在寻找类似的解决方案。 您可以尝试在适配器方法 getChieldView 上获取父视图。 我认为这个父母是你所有孩子的父母观点。 并将资源的背景设置为此父级。 我是这样设计的:

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

        【讨论】:

          猜你喜欢
          • 2013-11-16
          • 1970-01-01
          • 1970-01-01
          • 2011-08-06
          • 2012-06-22
          • 2015-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多