0

我正在开发一个自定义控件,并希望使用与 ListView 控件相同的颜色来突出显示所选项目。

我尝试使用context.getResources().getDrawable(android.R.drawable.list_selector_background) 然后setBackgroundDrawable()在我的视图上使用,但背景仍然是透明的。

我不想使用状态,我只需要一个可以在我的控件上用作背景的颜色值或可绘制对象。

请帮忙!

4

3 回答 3

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>

并再次在您的可绘制文件夹中添加此其他 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>
于 2013-06-28T00:51:50.120 回答
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你的观点在哪里。

于 2013-06-28T00:38:06.610 回答
0

你可以这样试试

例如,您需要使用以下代码获取列表项视图
int visiblePosition = listview.getFirstVisiblePosition();
视图视图 = listview.getChildAt(1 - visiblePosition);

// 要获取特定列表视图项的颜色并设置它,
View newView = listview.getChildAt(5 - visiblePosition);
newView.setBackgroundColor(((ColorDrawable) view.getBackground()).getColor());

于 2014-06-20T07:05:14.997 回答