我正在开发一个自定义控件,并希望使用与 ListView 控件相同的颜色来突出显示所选项目。
我尝试使用context.getResources().getDrawable(android.R.drawable.list_selector_background)
然后setBackgroundDrawable()
在我的视图上使用,但背景仍然是透明的。
我不想使用状态,我只需要一个可以在我的控件上用作背景的颜色值或可绘制对象。
请帮忙!
我正在开发一个自定义控件,并希望使用与 ListView 控件相同的颜色来突出显示所选项目。
我尝试使用context.getResources().getDrawable(android.R.drawable.list_selector_background)
然后setBackgroundDrawable()
在我的视图上使用,但背景仍然是透明的。
我不想使用状态,我只需要一个可以在我的控件上用作背景的颜色值或可绘制对象。
请帮忙!
我认为最好的选择是在列表视图的 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>
并再次在您的可绘制文件夹中添加此其他 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>
那么列表选择器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
你的观点在哪里。
你可以这样试试
例如,您需要使用以下代码获取列表项视图
int visiblePosition = listview.getFirstVisiblePosition();
视图视图 = listview.getChildAt(1 - visiblePosition);
// 要获取特定列表视图项的颜色并设置它,
View newView = listview.getChildAt(5 - visiblePosition);
newView.setBackgroundColor(((ColorDrawable) view.getBackground()).getColor());