13

ListView選択した行を強調表示するために、各項目の背景としてドローアブル セレクターがあります。Ice Cream Sandwich ではすべて正常に動作しますが、Jelly Bean では動作しないようです。どのような変更が機能を停止させた可能性があるか、およびそれを修正するために何をする必要があるかを示すドキュメントが見つかりません。

ListView機能しないということは、アイテムの背景色の行をクリックしても色が変わらないことを意味します@color/blueが、ICS では変わります。

これは私が使用しているセレクターコードです (listing_selector.xml):

<selector xmlns:android="http://schemas.android.com/apk/res/android" >

   <item android:state_focused="true" android:drawable="@color/blue" />

   <item android:state_pressed="true" android:drawable="@color/blue" />

   <item android:state_activated="true" android:drawable="@color/blue_selected" />  

   <item android:state_selected="true" android:drawable="@color/blue_selected" />

   <item android:drawable="@android:color/transparent" />

</selector>

これはListViewアイテムのレイアウトです:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"  
    android:layout_height="fill_parent" 
    android:orientation="horizontal"
    android:background="@color/listing_selector"    
>

    <TextView 
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true" 
    />

</RelativeLayout>

これは青色のリソースです。

<resources>
    <color name="blue">#ff33b5e5</color>       
</resources>

更新 1:

セレクターをcolorフォルダーからフォルダーに移動しdrawable、コードをこれに更新しようとしました:

android:background="@drawable/listing_selector"

更新 2:

また、 でListView、これを追加しようとしました:

    <ListView android:id="@android:id/list"
        android:layout_width="wrap_content"  
        android:layout_height="fill_parent" 
        android:listSelector="@drawable/listing_selector"   
    />

更新 3:

私のコードに何かあるのではないかと思いましたが、 からすべてのコードを削除しましたがonListItemClickListViewまだ機能してselectorいません。

更新 4:

機能しているように見える、機能していない、state_selectedに絞り込みましたstate_activatedstate_pressed

更新 5:

私は間違っていたと思います。セレクターがまったく認識されていないと思います。ListView組み込みの強調表示をセレクタと混同していました。私のプロジェクトのセットアップ方法と関係があるのか​​ どうか疑問に思っています。ライブラリクラスにセレクターがあります。ICS から JB に変更された可能性がありますが、セレクターをアプリのプロジェクトに移動しても修正されなかったようです。

更新 6:

OK、さらに髪を引っ張った後、色の変更が機能するため、セレクターが認識されていることを意味するため、認識されるstate_selectedかどうかを再度絞り込みました 。コメントから、他の人がジェリービーンで動作するセレクターを取得できたので、特に私のアプリに何かがあるようです。state_activatedstate_pressed

他に興味深いのはdrawable、デフォルト状態の値を変更しても認識されないことです。私が持っている場所ではcolor/transparent、それを色に変更するとリストがその色に変わると思いますが、そうではありません。

また、これは ICS でも機能しません。

更新 7:

さらに髪を引っ張った後、メニュー項目を長押しすると、その項目の色が変更されることがわかりました。アイテムをクリックするだけではまだ機能しません。それが何を意味するのかさえわかりません。

** 最終更新:**

あきらめて、セレクターを削除し、ListViewオンクリックを更新し、クリックされた位置を記憶してコードから強調表示しています。理想的ではありませんが、修正しようとする価値はありません。

4

5 に答える 5

2

わかりました、セレクターに問題があると思います。state_focused と state_activated を削除してみてください。セレクターでこれを試すことができます:

<!-- Disabled State -->
<item
    android:state_enabled = "false"
    android:state_focused = "true"
    android:state_pressed = "true"
    android:drawable="@android:color/transparent">
</item>
<item
    android:state_enabled = "false"
    android:state_focused = "true"
    android:drawable="@android:color/transparent">
</item>

<!-- Pressed State -->
<item
    android:state_pressed = "true"
    android:state_focused = "true">
    <shape>
        <solid android:color="@color/blue"/>
    </shape>
</item>
<item
    android:state_pressed = "true"
    android:state_focused = "false">
    <shape>
        <solid android:color="@color/blue"/>
    </shape>
</item>

<!-- Normal State -->
<item
    android:drawable="@android:color/transparent">
</item>

の代わりに形状オブジェクトも使用する必要があることがわかりましたandroid:drawable.ICS以前の電話では、リスト全体が押されたリスト項目ではなくその色で強調表示されるためです。

コードを追加することもできますstate_selectedが、それがどのように使用されるかはわかりません。ジェリー ビーンが使用する状態のデフォルト セレクター コードを確認してください: list_selector_background.xml

于 2012-09-19T19:21:39.487 に答える
1

あるバージョンでは機能し、別のバージョンでは機能しない理由は言えませんが、別の解決策を見つけました。

リソースでドローアブルとして色を定義する

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <drawable name="blue">#00F</drawable>
    ...
</resources>

セレクターでこの色のドローアブルを使用します

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/blue" />
    ...
    ...
</selector>

これを試して、私に知らせてください。

于 2012-09-19T10:13:08.540 に答える
1

APIドキュメントから:

注: Androidは、オブジェクトの現在の状態に一致する状態リスト内の最初のアイテムを適用することに注意してください。したがって、リストの最初の項目に上記の状態属性が含まれていない場合は、毎回適用されるため、デフォルト値は常に最後にする必要があります (次の例に示すように)。

したがって、推奨される順序に従ってセレクターの状態を並べ替えてみてください。あなたの場合、これは次のようになります。

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
   <item android:state_pressed="true" android:drawable="@color/blue" />
   <item android:state_focused="true" android:drawable="@color/blue" />
   <item android:state_selected="true" android:drawable="@color/blue_selected" />
   <item android:state_activated="true" android:drawable="@color/blue_selected" />  
   <item android:drawable="@android:color/transparent" />
</selector>
于 2012-09-21T19:27:32.457 に答える
1

listing_selector.xmlフォルダー内にあり、次のように RelativeLayoutres/drawableの属性を設定する必要があります。android:background

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"  
    android:layout_height="fill_parent" 
    android:orientation="horizontal"
    android:background="@drawable/listing_selector"    
>
于 2012-07-26T02:27:25.980 に答える
0

よく出来てると思います!!

あなたのセレクターxmlファイルコード:-

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">

        <item android:drawable="@color/gray" android:state_focused="true"/>
        <item android:drawable="@color/gray" android:state_pressed="true"/>
        <item android:drawable="@color/orange" android:state_activated="true"/>
        <item android:drawable="@color/orange" android:state_selected="true"/>
        <item android:drawable="@color/orange"/>

    </selector>

ここで、res フォルダーの下にフォルダー values-v16 を作成し、このカラー ファイルをその中に入れます。

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <color name="gray">#4f4f4f</color>
    <color name="orange">#e26c0e</color>

</resources>

そしてリストビュー:

<ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="20dp"
        android:listSelector="@drawable/listing_selector" >
</ListView>

これがうまくいくことを願っています!バージョン 4.1 でテスト済み

于 2012-09-20T12:19:44.680 に答える