6

我的应用程序有一个网格视图,默认情况下,当我单击它时,它的项目不会突出显示(我不知道为什么?)。我尝试如下添加一个列表选择器,但它也不起作用,

<GridView
                android:id="@android:id/list"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                android:layout_above="@+id/load_more_process_id"
                android:layout_alignParentTop="true"
                android:drawSelectorOnTop="false"
                android:listSelector="@drawable/grid_selector"
                 >
            </GridView>

这是我的选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:drawable="@android:color/black"></item>
<item android:state_pressed="false" android:drawable="@android:color/white"></item>

4

3 回答 3

9

如果列表项内容(或每个网格项的视图)中有可聚焦元素,则不会绘制选择器

例如,如果您的列表项的模板是:

<LinearLayout android:orientation="horizontal" ... >
    <CheckBox android:id="@+id/checkBox" ... />
    <TextView android:id+"@+id/textView" ... />
</LinearLayout>

那么 ListView 将不会为每个 ListView 项目绘制选择器,因为 CheckBox 默认情况下是可聚焦的。

您可以为每个随选择状态更改的项目提供背景,或者禁用对所有可聚焦元素的焦点(这反过来需要您编写一个梦幻般的适配器来在选择状态更改时检查复选框。

例如:

<CheckBox android:id="@+id/checkBox" android:focusable="false" ... />

将导致封闭的 ListView 再次开始绘制选择器。

有状态可绘制的示例:

可绘制/my_list_selector_bg.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/list_background_pressed"
        android:state_pressed="true" />
    <item android:drawable="@drawable/list_background_focused"
        android:state_focused="true" />
    <item android:drawable="@android:color/transparent" />
 </selector>

然后将其应用于适配器返回的每个视图的背景:

<LinearLayout android:orientation="horizontal" 
      android:background="@drawable/my_list_selector_bg"
  ... >

任何一种方法都行得通。

列表适配器类(GridView、ListView 和 c)对适配器返回的每个视图调用 hasFocusable(),如果 hasFocusable() 返回 true,则禁用选择绘制。幸运的是,它们还将选择/焦点/按下/活动状态复制到当前焦点或选定的适配器项,因此您可以根据需要自己绘制它。

于 2012-12-02T09:19:34.617 回答
8

对于那些和我有同样问题的人,试试

gridView.setDrawSelectorOnTop(true);

我的每个 GridView 项目中都有一个 ImageView 和一个 TextView。我的选择器正在工作,但它在我的图像后面绘制。

于 2014-10-18T03:26:11.340 回答
-1
  1. 网格视图的布局:

     <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:listSelector="@drawable/gridselector"/>
    
  2. 创建自定义选择器 gridselector.xml,如:

    <selector xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/selector_item">
       <item 
         android:state_pressed="true" 
         android:drawable="@drawable/focus_offfocus">
      </item>
    
       <item 
          android:state_enabled="true" 
          android:state_focused="true" 
          android:drawable="@drawable/focus_onfocus">
      </item>
    
      <item android:state_enabled="true" 
        android:drawable="@drawable/focus_offfocus">
      </item> 
    </selector>
    
于 2012-12-02T05:43:42.177 回答