按下时网格视图项不突出显示

时间:2012-12-02 03:03:37

标签: android android-layout android-widget

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

<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>

3 个答案:

答案 0 :(得分: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再次开始绘制选择器。

有状态的drawable示例:

抽拉/ 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"
  ... >

任何一种方法都可行。

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

答案 1 :(得分:7)

对于那些遇到同样问题的人,请尝试

<强> gridView.setDrawSelectorOnTop(真);

我的每个GridView项目都有一个ImageView和一个TextView。我的选择器正在工作,但它正在我的形象背后。

答案 2 :(得分:-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>