この質問は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でのテスト)
私はこの正確な問題に遭遇しました。問題は、R.layout.fragment_navigation_drawer_list_item
の背景がドローアブルに変更する必要があることです。レイアウトにAndroid:background="@drawable/activated_background"
を追加するだけです。
この質問に対する完全な明確な答えを見つけることができなかったので、ここにあります:
手順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>