4

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

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

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

我试过了stylesselectors但真正让我感到沮丧的是,如果我更改子项目的背景,那么我需要selectors为所有焦点/启用等组合添加。当我试图覆盖一个单一的东西时。

有没有办法继承父项stylebackground仅设置为非聚焦、启用的子项并styles保留其他项?

4

3 回答 3

5

出色地。这对我有用:

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

于 2009-12-15T19:02:48.240 回答
0

我刚刚发现了一种“某种程度上”设置背景颜色的方法,而不必跳过选择框。

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

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

于 2010-04-06T02:56:49.890 回答
0

我寻找类似的解决方案。您可以尝试在适配器方法 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);
    }
于 2014-03-13T12:52:23.250 回答