Android 按下时网格视图项不亮

Android 按下时网格视图项不亮,android,android-layout,android-widget,Android,Android Layout,Android Widget,我的应用程序有一个网格视图,默认情况下,当我点击它时,它的项目不会高亮显示(我不知道为什么?)。我尝试将其添加为列表选择器,如下所示,但它不起作用 <GridView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="match_parent"

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

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

  • 栅格视图的布局:

     <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:listSelector="@drawable/gridselector"/>
    
    
    
  • 创建自定义选择器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>
    
    
    

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

    例如,如果列表项的模板为:

    <LinearLayout android:orientation="horizontal" ... >
        <CheckBox android:id="@+id/checkBox" ... />
        <TextView android:id+"@+id/textView" ... />
    </LinearLayout>
    
    
    
    然后ListView将不会为每个ListView项绘制选择器,因为默认情况下,复选框是可聚焦的

    您可以为随选择状态更改的每个项目提供背景,也可以禁用对所有可聚焦元素的聚焦(这反过来要求您编写一个适配器,以便在选择状态更改时选中复选框)

    例如:

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

    有状态可绘制图形的示例:

    可绘制/我的列表\u选择器\u 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和c)对适配器返回的每个视图调用hasFocusable(),如果hasFocusable()则禁用选择绘图返回true。幸运的是,它们还将selection/focus/pressed/active状态复制到当前聚焦或选定的适配器项,因此您可以自己绘制它(如果需要)。

    对于与我有相同问题的人,请尝试

    gridView.setDrawSelectorOnTop(true);


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

    突出显示的颜色是黑色,背景色是什么?背景色是透明的,父视图背景是白色的…您是否使用自定义适配器?如果是,请在自定义适配器上使用选择器一个常见的陷阱:在列表项tempate中放置一个复选框。(编辑原文以提供示例)。工作得很有魅力!非常感谢!回想一下我在使用复合控件列表视图时的经验……如果你对默认行为感到不安,你需要认真考虑如何在具有DPAD或轨迹球导航的设备上处理对焦和键盘导航。谷歌电视设备是最值得注意的例子默认情况下,可以使用DPAD导航,但用户可以在必要时切换到触摸模式。如果您的设备具有出站USB端口,则可以通过将PC键盘插入USB端口并使用光标键(或蓝牙键盘)导航来模拟体验。
    <LinearLayout android:orientation="horizontal" 
          android:background="@drawable/my_list_selector_bg"
      ... >