如何获取ListView选择颜色值?

时间:2013-06-28 00:28:03

标签: android android-listview android-ui android-drawable

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

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

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

请帮忙!

3 个答案:

答案 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());