我在我的应用中使用ExpandableListView
,我从用户那里得到的一个投诉是
当List
项目展开时,很难在视觉上区分孩子的位置
项目结束,下一个组项目开始。
所以我想将子List
项的背景更改为不同的阴影。
到目前为止,我所做的野蛮尝试都是基于直接更改子View
项内部元素的背景颜色和文本,但这会导致徘徊和亮点丢失。所以我的问题是 - 实现上述目标的好策略是什么?
我尝试了styles
和selectors
但真正让我失望的是,如果我更改了子项目的背景,那么我需要为所有焦点/启用组合添加selectors
等等。我试图用它来覆盖一件事。
是否有一种方法可以继承父style
并仅为非焦点启用的子项设置background
并保留其他styles
?
答案 0 :(得分:5)
好。这对我有用:
res/drawable
目录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
复制到我项目的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);
}