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

どちらのアプローチでも機能します。

リストアダプタクラス(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 に答える