繁体   English   中英

Android - ExpandableListView更改子项的背景

[英]Android - ExpandableListView change background for child items

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

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

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

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

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

好。 这对我有用:

  1. 在项目的res/drawable目录中创建list_background.xml
  2. 将子项的顶级布局的背景值设置为上面的drawable。 如果你在这一点上摸不着头脑 - 我指的是在ExpandableListAdapter#getChildView创建可扩展列表的子视图时使用的xml布局文件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.xmllist_highlight_inactive.xml/android-sdk-windows-1.6_r1/platforms/android-1.5/data/res/drawable到我的项目的绘制目录。 @color/item_body只是一片灰色

我寻找类似的解决方案。 您可以尝试在适配器方法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);
    }

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM