web-dev-qa-db-ja.com

「activateBackgroundIndicator」ナビゲーションドロワーを使用した、選択したアイテムのカスタム背景色

この質問はSOでよく聞かれ、私はすべての回答を参照しました。ナビゲーションドロワーで選択したアイテムのデフォルトのホロブルーの背景が残っています。私はJavaに不慣れで、.setAdapter()の「コンテキスト」部分について混乱しています。
私のプロジェクトは、ナビゲーションドロワーを使用して複数のフラグメントが交換された単一のアクティビティです。

これが私のアダプターです:

_mDrawerListView.setAdapter(new ArrayAdapter<String>(
            // First parameter - Context
            getActionBar().getThemedContext(),
            // Second parameter - Layout for the row
            R.layout.fragment_navigation_drawer_list_item,
            // Third parameter - ID of the TextView to which the data is written
            Android.R.id.text1,
            // Forth - the Array of data
            new String[]{
                    getString(R.string.title_section1),
                    getString(R.string.title_section2),
                    getString(R.string.title_section3),
                    getString(R.string.title_section4),
            }));
    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
_

ここでのコンテキストは、Android Studioの「調理済み」ナビゲーションドロワーからのものです。これが答えになると思いました 選択したアイテムのナビゲーションドロワーアイテムの背景色 。コンテキストをgetActivity().getBaseContext(),に変更しましたが、何も変更されませんでした。

私のテーマ(_styles.xml_):

_<resources>
    <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <!-- API 14 theme customizations can go here. -->
        <item name="Android:actionBarStyle">@style/ActionBar</item>
    </style>

    <!-- Navigation Drawer styling -->
    <style name="NavDrawerItemSelected" parent="AppBaseTheme">
        <item name="Android:activatedBackgroundIndicator">@drawable/activated_background</item>
    </style>
</resources>
_

_activated_background_ in'drawables 'dir:

_<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_activated="true" Android:drawable="@color/green" />
    <item Android:state_selected="true" Android:drawable="@color/green" />
    <item Android:state_pressed="true" Android:drawable="@color/green" />
    <item Android:state_checked="true" Android:drawable="@color/green" />        
    <item Android:drawable="@Android:color/transparent" />
</selector>
_

上記のどの状態が使用されるのかわからないので、見つけたすべての状態を追加しました。
最後に、アイテムが選択されると、mDrawerListView.setItemChecked(position, true);が呼び出されます。
カスタムテーマのスタイルを除いて、すべてが機能します。 (最小API = 11、API 17 AVDでのテスト)

12
Flash

私はこの正確な問題に遭遇しました。問題は、R.layout.fragment_navigation_drawer_list_itemの背景がドローアブルに変更する必要があることです。レイアウトにAndroid:background="@drawable/activated_background"を追加するだけです。

25
trevor-e

この質問に対する完全な明確な答えを見つけることができなかったので、ここにあります:

手順1.アダプタが使用するリストアイテムのレイアウトを指定します。この例では、次のように指定しています。R.layout.fragment_navigation_drawer_list_item

そのようです:

mDrawerListView.setAdapter(new ArrayAdapter<String>(
        // First parameter - Context
        getActionBar().getThemedContext(),
        // Second parameter - Layout for the row
        R.layout.fragment_navigation_drawer_list_item,
        // Third parameter - ID of the TextView to which the data is written
        Android.R.id.text1,
        // Forth - the Array of data
        new String[]{
                getString(R.string.title_section1),
                getString(R.string.title_section2),
                getString(R.string.title_section3),
                getString(R.string.title_section4),
        }))`

ステップ2.fragment_navigation_drawer_list_item.xmlを作成およびカスタマイズして、次のようなセレクターを持つドローアブルを指定します。Android:background="@drawable/activated_background"完全な例:

<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@Android:id/text1"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:textAppearance="?android:attr/textAppearanceListItemSmall"
    Android:gravity="center_vertical"
    Android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    Android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    Android:minHeight="?android:attr/listPreferredItemHeightSmall"
    Android:background="@drawable/activated_background" />

ステップ3.質問のように、activated_background.xmlファイルでセレクターを作成してカスタマイズすると、次のようになります。

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_activated="true" Android:drawable="@color/green" />
    <item Android:state_selected="true" Android:drawable="@color/green" />
    <item Android:state_pressed="true" Android:drawable="@color/green" />
    <item Android:state_checked="true" Android:drawable="@color/green" />
    <item Android:drawable="@Android:color/transparent" />
</selector>
9
u2tall