0

ルートが実装されていない、選択したカスタム リスト項目のをオレンジ色から system_blue に変更することに成功しました。 ViewGroupCheckableselector.xml

<selector>  
    <item android:state_pressed="true" 
        android:drawable="@color/system_blue"/>
    <item android:state_checked="true"
        android:drawable="@color/system_blue"/>
    <item android:drawable="@android:color/transparent"/> 
</selector>  

ケースもstate_checked定義されていますが、指が選択された項目から離れた後、選択されたリスト項目の状態は維持されません。

ViewGroup implements Checkable選択したリスト項目のステータスを維持する必要があるため、カスタム リスト項目の rootになりました。また、 InterfaceCheckableのメンバー関数setChecked()は次のように実装されます。

public void setChecked(boolean checked) {
    mChecked = checked;
    setBackgroundDrawable(checked ? new ColorDrawable(
    getResources().getColor(R.color.system_blue)) : null);
}

指が選択項目から離れた後、選択項目の色を system_blue に維持できるようになりました。それにもかかわらず、アイテムを押すと、最初に色が system_blue ではなくデフォルトのオレンジ色に変更されます。私の Android デバイスにはデフォルトのオレンジ色があります。どんなアイデアでも大歓迎です。

4

3 に答える 3

1

チェックを自分で処理してみて、listView の選択モードを CHOICE_MODE_NONE に設定します

また、listView の onItemClickListener で項目のチェック状態を処理します。したがって、バックグラウンドと状態を完全に制御できます。

于 2012-07-25T20:43:58.287 に答える
0

HoneyComb 以上で作業している場合は、追加するだけです

?android:attr/activatedBackgroundIndicator

親ビューの背景として。その簡単な修正:)

于 2012-12-05T07:15:59.167 に答える
0

まさにこれを行うために、今日作成したこの例を確認してください。

Github のコード

編集

押している間にアイテムの色を変更するには、次のように、押された状態の新しいアイテムを追加する必要があります。

<item android:drawable="@drawable/gradient_bg_hover" 
    android:state_pressed="true"/>
于 2012-07-25T20:57:52.080 に答える