2012-09-12 13 views
6

私はListViewを持っており、電話機でうまく動作します。今、私はタブレットのUIを作っています。左にListView、右に詳細があります。Android:ListViewの選択後に青い背景を維持する

アイテムに触れると、押している間は青色に点滅します。 Nexus 7のGmailアプリと同じように、他のアイテムが選択されるまでその青色を維持したいと考えています。

これを達成する最もクリーンな方法は何ですか?私はむしろ手動で背景を設定することを避けるだろう、私はそこに "アクティブ"とそれに応じてテーマをマークする方法があると仮定します。

+0

あなたは、このリンクは役に立ちかもしれない見ることができます/stackoverflow.com/questions/5682053/listview-item-wont-stay-selected –

+0

リストビュー項目のビューの背景色は、リストビュー項目のクリックで設定できます。 –

答えて

17

これを達成する最もクリーンな方法は何ですか?

あなたが探しているものは、「アクティブ化」状態と呼ばれます。この作業を行うには

ステップ1:res/values-v11/には、activatedを実装するスタイルリソースがあります。例えば、そこに定義されたAppTheme宣言を持つ新しいプロジェクトのために、のようなもので行く:

<resources> 

    <style name="AppTheme" parent="android:Theme.Holo.Light"></style> 

    <style name="activated" parent="AppTheme"> 
     <item name="android:background">?android:attr/activatedBackgroundIndicator</item> 
    </style> 

</resources> 

ステップ#2:そう、ちょうどスタブスタイルのリソースとして、任意の古いデバイス用res/values/に同じスタイルを定義します。 、ListViewの行のためのあなたのレイアウトXMLリソースのルート要素

聖の属性のリストにstyle="@style/activated"を追加します。

<resources> 

    <style name="AppTheme" parent="android:Theme.Light"/> 

    <style name="activated" parent="AppTheme"/> 

</resources> 

ステップ#3:それへの参照が機能し続けEP#4:ListFragmentに、次の行のように単一選択リストであるとListViewを設定します。

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

あなたはthis sample projectthis sample project、およびthis sample projectでこの動作を確認することができます。

android.R.layout.simple_list_item_activated_1

代わりの

R.layout.simple_list_item_checkable_1を使用してComplete Working Sample of the Gmail Three-Fragment Animation Scenario?

+0

これはうまく動作し、プログラムでバックグラウンドを変更し続けるよりもはるかに優れています。どうもありがとうございました! – erwan

4

:これら最初の二つのサンプルの詳細な背景については、このSO質問を参照してください。

いつか誰かをチェックするだけです。

2

検索して私の髪を引っ張った後、私はちょうどactivatedBackgroundIndicatorがActionBarSherlockスタイリングシステムで利用可能であることを知った。下位互換性のあるアプリケーションを開発する開発者のほとんどはActionBarSherlockを使用しているので、ほとんどの場合、ActionBarSherlockを使用するのは良いオプションです。だからではなく、単に使用し、前11にアンドロイドのバージョンでエラーを与えるであろうandroid:background="?android:attr/activatedBackgroundIndicator"を使用する:android:background="?activatedBackgroundIndicator"

ここでは例の行レイアウトのXMLコードは次のとおりです。http:/

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
    //note the activatedBackgroundIndicator 
android:background="?activatedBackgroundIndicator" 
android:minHeight="?android:attr/listPreferredItemHeight" 
android:paddingBottom="2dip" 
android:paddingTop="2dip" > 

<TextView 
    android:id="@+id/text1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:paddingLeft="6dip" 
    android:paddingRight="6dip" 
    android:textSize="15sp" /> 

<TextView 
    android:id="@+id/text2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:paddingRight="5dip" 
    android:textSize="20dip" /> 
    </LinearLayout> 
+0

'アンドロイド:background ="?activatedBackgroundIndicator "を使うのではなく、アンドロイドバージョン11より前にエラーを出すのではなく、単に:android:background ="?activatedBackgroundIndicator "'?これを説明してもらえますか? – kuchi

+0

ありがとうございました。答えを訂正しました。 –

関連する問題