按下时网格视图项不高亮

Tai*_*ran 6 android android-widget android-layout

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

<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>
Run Code Online (Sandbox Code Playgroud)

这是我的选择器:

<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>
Run Code Online (Sandbox Code Playgroud)

Rob*_*ies 9

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

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

<LinearLayout android:orientation="horizontal" ... >
    <CheckBox android:id="@+id/checkBox" ... />
    <TextView android:id+"@+id/textView" ... />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

然后ListView不会为每个ListView项绘制一个选择器,因为默认情况下CheckBox是可聚焦的.

您可以为每个随选择状态更改的项目提供背景,或者禁用所有可聚焦元素的焦点(这反过来要求您编写一个精灵花哨的适配器来检查选择状态更改时的复选框.

例如:

<CheckBox android:id="@+id/checkBox" android:focusable="false" ... />
Run Code Online (Sandbox Code Playgroud)

将导致封闭的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>
Run Code Online (Sandbox Code Playgroud)

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

<LinearLayout android:orientation="horizontal" 
      android:background="@drawable/my_list_selector_bg"
  ... >
Run Code Online (Sandbox Code Playgroud)

这两种方法都有效.

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


wiz*_*urd 7

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

gridView.setDrawSelectorOnTop(真);

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