我正在开发一个自定义控件,并希望使用相同颜色的ListView控件用于突出显示所选项目。
我尝试使用context.getResources().getDrawable(android.R.drawable.list_selector_background)
然后在我的视图中使用setBackgroundDrawable()
,但背景仍然是透明的。
我不想使用状态,我只需要一个颜色值或drawable我可以在我的控件上用作背景。
请帮忙!
答案 0 :(得分:2)
我认为最好的选择是在列表视图的xml上使用这样的选择器:
<ListView
....
android:listSelector="@drawable/selectable_background"
..../>
然后在您的drawable文件夹中添加一个xml文件,如下所示:
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime" >
<item android:state_pressed="false" android:state_focused="true"
android:drawable="@drawable/list_focused" />
<item android:state_pressed="true"
android:drawable="@drawable/pressed_background" />
<item android:drawable="@android:color/transparent" />
</selector>
再次在您的drawable文件夹中添加其他xml文件:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/green" />
</shape>
在您的drawable-hdpi上添加这个9补丁文件(更改颜色或文件或使用此网站创建自己的http://android-holo-colors.com/):
https://dl.dropboxusercontent.com/u/33565803/StackOverFlowExamples/list_focused.9.png
像这样,您应该能够在列表视图中使用自定义突出显示颜色。
编辑:
可点击视图的背景:
android:background="@drawable/pressed_button"
默认ListView高亮颜色的选择器(drawable文件夹中的pressed_button.xml):
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:drawable/list_selector_background"
android:state_pressed="true" />
<item android:drawable="@android:color/transparent"
android:state_focused="true" />
<item android:drawable="@android:color/transparent" />
</selector>
答案 1 :(得分:0)
列表选择器drawable在默认状态下(通常)是透明的。所以你必须先改变状态。
可以使用按下状态,例如:
Drawable drawable = context.getResources().getDrawable(android.R.drawable.list_selector_background);
drawable.setState(new int[] {android.R.attr.state_pressed});
x.setBackgroundDrawable(drawable);
x
是您的观点。
答案 2 :(得分:0)
你可以这样试试,
例如,您需要使用以下代码获取列表项视图
int visiblePosition = listview.getFirstVisiblePosition();
View view = listview.getChildAt(1 - visiblePosition);
//获取特定列表视图项的颜色并进行设置,
查看newView = listview.getChildAt(5 - visiblePosition);
newView.setBackgroundColor(((ColorDrawable)view.getBackground())。getColor());