我正在使用新的Android设计支持库在我的应用程序中实现导航抽屉.
我无法弄清楚如何更改所选项目的颜色!
这是菜单的xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/navigation_item_1"
android:icon="@drawable/ic_1"
android:title="@string/navigation_item_1"/>
<item
android:id="@+id/navigation_item_2"
android:icon="@drawable/ic_2"
android:title="@string/navigation_item_2"/>
</group>
Run Code Online (Sandbox Code Playgroud)
这里是导航视图xml,它放在一个android.support.v4.widget.DrawerLayout:
<android.support.design.widget.NavigationView
android:id="@+id/activity_main_navigationview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/drawer_header"
app:itemIconTint="@color/black"
app:itemTextColor="@color/primary_text"
app:menu="@menu/menu_drawer">
<TextView
android:id="@+id/main_activity_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:textColor="@color/primary_text" />
</android.support.design.widget.NavigationView>
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助 !
[编辑]我已经看过这样的解决方案:更改android菜单的背景颜色.
这似乎是一个非常黑客,我认为通过新的设计支持库,会引入更清洁的东西?
我使用Android Studio来实现导航抽屉,我无法获得用于显示我们当前要更改的部分的蓝色.
我尝试了很多东西,我目前正在使用listSelector,它看起来像:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@color/selected" />
<item android:state_pressed="true" android:drawable="@color/highlight" />
</selector>
Run Code Online (Sandbox Code Playgroud)
我也试过了state_checked.state_pressed在这种情况下工作,但当前选择的项目仍然是蓝色.
编辑:我一直在研究这个,当创建适配器时,传递的上下文是getActionBar().getThemedContext()如此我想如果我能找到正确的属性来分配我的操作栏样式我可以从那里改变它.我尝试了几个不同的属性而没有运气.有谁知道确切的属性?
我也意识到我是否愿意
<item name="android:activatedBackgroundIndicator">@drawable/nav_listview_selector</item>
在我的主题和变化的主要部分getActionBar().getThemedContext()的getActivity.getBaseContext话,我可以改变颜色,但我不认为这是正确的方式.我认为应该使用主题背景.因此,如果有人知道activatedBackgroundIndicator可以放在哪里,那么它将被用于getActionBar.getThemedContext()
EDIT2:
因此,用于listview的文本视图是SDK中的一个,如下所示:
<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:background="?android:attr/activatedBackgroundIndicator"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
/>
Run Code Online (Sandbox Code Playgroud)
所以我尝试修改"?android:attr/activatedBackgroundIndicator"主题级别,但它对选中/选中/激活没有效果,但它对按下有效.有人知道为什么吗?我怎么能改变它?
这个问题在SO上已经被问了很多,我已经引用了所有的答案.我的导航抽屉上的所选项目仍然保留默认的Holo蓝色背景.我是Java新手,我对"上下文"部分感到困惑.setAdapter().
我的项目是一个Activity,使用导航抽屉交换了多个片段.
这是我的适配器:
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);
Run Code Online (Sandbox Code Playgroud)
这里的上下文来自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 …Run Code Online (Sandbox Code Playgroud) android ×3