0

我想在按下时更改我的 StaggeredGridView 项目的背景颜色,但目前默认情况下我得到一个难看的姜饼橙色,如此 处所示。我尝试将 gridview 项目背景设置为选择器,但是当我这样做时,如果我单击一个项目,所有项目的背景颜色都会更改。

<!-- My selector -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/holo_blue_light"
      android:state_pressed="true" />    
<item android:drawable="@android:color/transparent" />
</selector>

这是在我的 StaggeredGridView 中,但没有帮助:

 <!-- In StaggeredGridView -->
 android:listSelector="@drawable/selector"

顺便说一句,我正在使用这个StaggeredGridView 库。提前致谢!

4

3 回答 3

3

在 staggeredGridViews onClick 事件的实现中:

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {

    for(int i=0;i<mGridView.getChildCount();i++) {
        mGridView.getChildAt(i).setBackgroundColor(getResources().getColor(R.color.yellow)); 
       // set all items to yellow
    }
    mGridView.getChildAt(position).setBackgroundColor(getResources().getColor(R.color.blue)); 
    //set the selected items color to blue
}

希望这可以帮助

于 2015-06-20T22:01:33.890 回答
1

解决方案是远离任何在 listSelector 中引用颜色的 @color 或 @drawable。我创建了两个 3x3 像素的 .png 文件。每个都与伽马层一起保存。在我的情况下,它是两种相同的颜色,每种颜色在 Gimp 中混合,颜色层上的透明度不同。所以当你选择一个项目时,你会得到一个 25% 颜色的叠加层,当你按下它时,你会得到一个 50% 颜色的 png。我将它们作为 bg_list_item_pressed.png 和 bg_list_item_highlighted.png 放在我的drawables中

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

  <!-- Selected --> 
  <item 
    android:state_focused="true" 
    android:state_pressed="false" 
    android:drawable="@drawable/bg_list_item_highlighted" /> <!--  @drawable/tab_focus -->

  <!-- Pressed -->
  <item 
    android:state_pressed="true" 
    android:drawable="@drawable/bg_list_item_pressed" /> <!--  @drawable/tab_press -->

</selector> 

然后

android:listSelector="@drawable/list_selector"
android:drawSelectorOnTop="true"
于 2013-11-12T13:41:57.950 回答
1

您应该更改该库中的一行,而不是制作自己的选择器

1)在库中有一个类叫做:StaggeredGridView

该类中有一个方法称为:useDefaultSelector()

在该注释内 setSelector 行并添加以下行:

setSelector(getResources().getDrawable(R.drawable.selector));

2)在库的drawable文件夹中创建一个xml文件,如下所示:selector.xml

<?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:drawable="@color/transparent" />


<item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@color/transparent" />
<item android:state_focused="true"  android:state_enabled="false"                              android:drawable="@color/transparent" />
<item android:state_focused="true"                                android:state_pressed="true" android:drawable="@color/yourColor1" />
<item android:state_focused="false"                               android:state_pressed="true" android:drawable="@color/yourColor2" />
<item android:state_focused="true"                                                             android:drawable="@color/yourColor3" />

</selector>
于 2014-11-13T14:39:12.593 回答