标签: android-navigationview

以编程方式将MenuItem添加到NavigationView-未选中该项目

我已经以NavigationView编程方式添加了项目:

**HERE ADD ITEMS**    

Menu rightMenu = mRightDrawerView.getMenu();
for (DataParking dataParking : dataParkingList) {   
    MenuItem menuItem = rightMenu.add(dataParking.getTimeParking()); 
}

**HERE ADD CLICK LISTENER**

mRightDrawerView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            // Select menu
            menuItem.setChecked(true);

            // Closing left_drawer on item click
            mDrawerLayout.closeDrawer(mRightDrawerView);

            return false;
        }
    });
Run Code Online (Sandbox Code Playgroud)

导航抽屉中的项目可正确单击,但选择不是持久的。如果我通过XML添加相同的项目,则效果很好。

android menuitem android-navigationview

2
推荐指数
1
解决办法
1092
查看次数

从NavigationView android中删除行分隔符

我有这个布局的NavigationView菜单:

<item android:title="title1">
    <menu>
        <item
            android:id="@+id/nav_tab1"
            android:icon="@drawable/ic_action_nav_tab1"
            android:title="test1" />
        <item
            android:id="@+id/nav_tab2"
            android:icon="@drawable/ic_action_nav_tab2"
            android:title="test2" />
    </menu>
</item>
<item android:title="title2">
    <menu>
        <item
            android:id="@+id/nav_settings"
            android:icon="@drawable/ic_action_settings"
            android:title="test3" />
    </menu>
</item>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何从菜单中删除行分隔符?

android navigationview android-navigationview

2
推荐指数
1
解决办法
2376
查看次数

NavigationView主题选择项目背景样式

我为我的应用程序创建了另一个主题,即Dark.我使用导航栏定义为

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_main"
    app:menu="@menu/activity_main_drawer" />
Run Code Online (Sandbox Code Playgroud)

它在菜单中定义了两组可选择的组

<item
    android:id="@+id/sort_item"
    android:title="One">
    <menu>
        <group
            android:id="@+id/menu_group_sort"
            android:checkableBehavior="single">
            <item
                android:id="@+id/nav_sort_new"
                android:title="@string/menu_new" />
            <item
                android:id="@+id/nav_sort_hot"
                android:title="@string/menu_hot" />
            <item
                android:id="@+id/nav_sort_top"
                android:title="@string/menu_top" />
        </group>
    </menu>
</item>

<item
    android:id="@+id/filter_item"
    android:title="Two">
    <menu>
        <group
            android:id="@+id/menu_group_filter"
            android:checkableBehavior="single">
            <item
                android:id="@+id/nav_category_all"
                android:title="@string/menu_all" />
            <item
                android:id="@+id/nav_category_business"
                android:title="@string/menu_business" />
            <item
                android:id="@+id/nav_category_technology"
                android:title="@string/menu_technology" />
            <item
                android:id="@+id/nav_category_politics"
                android:title="@string/menu_politics" />
        </group>
    </menu>
</item>
Run Code Online (Sandbox Code Playgroud)

通常,所选项目的文本是colorPrimary,背景看起来是某种Android灰色.当我定义我的新主题时,我会这样使用它

<!-- Dark theme. -->
<style name="AppTheme.Dark" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimaryInverse</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDarkInverse</item>
    <item name="colorAccent">@color/colorAccentInverse</item>
    <item name="android:textColor">@color/textColorPrimaryInverse</item>
    <item name="android:textColorPrimary">@color/textColorPrimaryInverse</item>
    <item name="android:textColorSecondary">@color/textColorSecondaryInverse</item>
    <item …
Run Code Online (Sandbox Code Playgroud)

android menu android-navigationview

2
推荐指数
1
解决办法
6027
查看次数

Android NavigationView 移除高程

我无法删除NavigationViewLollipop 和更高版本的高程(阴影)。我添加mDrawerLayout.setScrimColor(Color.TRANSPARENT);到我的DrawerLayout, 但它会影响棒棒糖之前的版本。我也尝试添加app:elevation="0dp"和添加android:elevation="0dp"到我的NavigationView但未成功。

在此处输入图片说明

我需要在 android 6 上获得 android 4 的结果。

android android-layout android-navigationview

2
推荐指数
1
解决办法
2023
查看次数

如何更改导航图标颜色

我的应用程序中有一个导航视图,在应用程序样式中添加两行之后:

<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
Run Code Online (Sandbox Code Playgroud)

导航图标颜色更改为黑色,对于这个问题,我在样式中添加了以下行:

<item name="android:textColorSecondary">@android:color/white</item>
Run Code Online (Sandbox Code Playgroud)

现在导航图标又是白色的,但现在我有一个新问题。使用上面的代码,导航项的标题也改变了颜色。

我没有找到解决此干扰的方法

风格 :

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:textColorSecondary">@android:color/white</item>

</style>
Run Code Online (Sandbox Code Playgroud)

导航菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn="navigation_view">

    <group
        android:id="@+id/testGRP"
        android:checkableBehavior="single"
        >
    <item android:title="???? : ?????? ????"
        android:id="@+id/menuItem_StudentList11"
        android:icon="@drawable/ic_arrow_drop_up"
        />

    <item android:title="???? ????"
        android:id="@+id/menuItem_StudentList_Quize1"
        android:icon="@drawable/all_exam_icon"
        />

        <item android:title="@string/Navigation_StudentList3"
            android:id="@+id/menuItem_StudentList_Quize"
            android:icon="@drawable/all_exam_icon"
            />

    </group>


    <item android:title="????????:"> //this line is title

    <menu>

    <item android:title="@string/Navigation_StudentList4"
        android:id="@+id/menuItem_StudentList_MidTerm"
        android:icon="@drawable/all_exam_icon"
        /> …
Run Code Online (Sandbox Code Playgroud)

android android-appcompat android-styles android-toolbar android-navigationview

2
推荐指数
1
解决办法
2160
查看次数

Android:导航视图文本颜色

图片胜过千言万语:

对

这应该是正确的外观..但我明白了: 错误的

这是我的代码:

<android.support.design.widget.NavigationView
    android:id="@+id/navigation_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="@color/Black"
    app:headerLayout="@layout/nav_header"
    app:itemIconTint="@color/White"
    app:itemTextColor="@color/White"
    app:menu="@menu/drawer" />
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

这是我的菜单-xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group>
        <item
            android:id="@+id/drawerFullName"
            android:icon="@drawable/fullnamemale"
            android:title="@string/full_name" />
        <item
            android:id="@+id/drawerAge"
            android:icon="@drawable/age"
            android:title="@string/age" />
        <item
            android:id="@+id/drawerAbout"
            android:icon="@drawable/about"
            android:title="@string/about_user_in_20_letters" />
        <item android:title="@string/personalize">
            <menu>
                <item
                    android:id="@+id/drawerChangeTheme"
                    android:icon="@drawable/changetheme"
                    android:title="@string/change_your_theme" />
            </menu>
        </item>
        <item android:title="@string/user_settings">
            <menu>
                <item
                    android:id="@+id/drawerLogout"
                    android:icon="@drawable/logout"
                    android:title="@string/logout" />
            </menu>
        </item>
    </group>
</menu>
Run Code Online (Sandbox Code Playgroud)

是的,“标题”颜色没有改变。还是黑的。。

要完成此操作,这里是带有白色背景的导航视图,现在您可以看到标题: 在此处输入图片说明

android android-navigationview

1
推荐指数
1
解决办法
3822
查看次数

无法更改项目文字的颜色和项目图标的色彩

我正在尝试如下更改导航视图的文本颜色和图标色调颜色,

<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

        <include layout="@layout/include_list_viewpager"/>


        <android.support.design.widget.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:background="@color/colorPrimary"
            android:fitsSystemWindows="true"
            android:minHeight="?attr/actionBarSize"
            app:itemIconTint="@android:color/white"
            android:theme="@style/AppTheme.NavigationView"
            app:itemTextAppearance="?android:attr/textAppearanceSmall"
            app:itemTextColor="@android:color/white"
            app:menu="@menu/drawer_view"/>

    </android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

但这并没有帮助我更改颜色。因此,我尝试以编程方式如下设置颜色,

   // FOR NAVIGATION VIEW ITEM TEXT COLOR
        int[][] state = new int[][]{
                new int[]{-android.R.attr.state_enabled}, // disabled
                new int[]{android.R.attr.state_enabled}, // enabled
                new int[]{-android.R.attr.state_checked}, // unchecked
                new int[]{android.R.attr.state_pressed}  // pressed

        };

        int[] color = new int[]{
                Color.WHITE,
                Color.WHITE,
                Color.WHITE,
                Color.WHITE
        };

        ColorStateList csl = new ColorStateList(state, color);


// FOR NAVIGATION VIEW ITEM …
Run Code Online (Sandbox Code Playgroud)

android android-navigationview

1
推荐指数
1
解决办法
2203
查看次数

拦截 NavigationUI.onNavDestinationSelected() 以使用“inclusive = true”使 backstack 弹出

我已经连接了我的菜单 xml 和 Android 导航组件navigation_view.setupWithNavController(navController),一切正常。我的菜单的一部分是注销选项。如果用户选择此导航目的地,应用程序应导航到AuthorizationFragment 并将返回堆栈弹出到此 Fragment 并将 inclusive 设置为 true以删除所有先前的Fragment

我查看了导航库的代码,并达到了应该发生这种情况的地步:

NavigationUI.onNavDestinationSelected():

/**
 * Attempt to navigate to the {@link NavDestination} associated with the given MenuItem. This
 * MenuItem should have been added via one of the helper methods in this class.
 *
 * <p>Importantly, it assumes the {@link MenuItem#getItemId() menu item id} matches a valid
 * {@link NavDestination#getAction(int) action id} or
 * {@link NavDestination#getId() destination id} to be navigated to.</p>
 * <p> …
Run Code Online (Sandbox Code Playgroud)

android navigation-drawer android-navigation android-navigationview android-jetpack

1
推荐指数
1
解决办法
2372
查看次数

导航视图菜单不更新

我在这里写的是关于我们从 AppCompat 库迁移到 AndroidX 库时引入的一个问题。在此过程中,当以下问题开始时,我们从 切换android.support.design.widget.NavigationView到 and that\xe2\x80\x99s。com.google.android.material.navigation.NavigationView

\n\n

在我们的NavigationView设计中,为了节省空间,我们实现了一个可展开的菜单,这样当用户点击\xe2\x80\x9cmore\xe2\x80\x9d按钮时,菜单就会展开以显示更多选项。一开始只有一些选项可见,其余选项不可见,如下所示;

\n\n
\n\n
    \n
  • 选项1
  • \n
  • 选项2
  • \n
  • 更多\xe2\x80\xa6
  • \n
\n\n
\n\n

单击 \xe2\x80\x9cMore...\xe2\x80\x9d 按钮后,菜单将扩展为;

\n\n
\n\n
    \n
  • 选项1
  • \n
  • 选项2
  • \n
  • 选项3
  • \n
  • 选项4
  • \n
  • 选项5
  • \n
  • 选项6
  • \n
\n\n
\n\n

为此,我们使用以下代码;

\n\n
@Override\npublic boolean onNavigationItemSelected(MenuItem item)\n{\n    ....\n    if (item.getItemId() == R.id.nav_more)\n    {\n        item.setVisible(false); // hide the \xe2\x80\x9cMore\xe2\x80\x9d item\n        getMenu().findItem(R.id.nav_option_3).setVisible(true);\n        getMenu().findItem(R.id.nav_option_4).setVisible(true);\n        getMenu().findItem(R.id.nav_option_5).setVisible(true);\n        getMenu().findItem(R.id.nav_option_6).setVisible(true);\n        return true;\n    }\n    .......\n    return false;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

好吧,这段代码在过去是有效的,但是当我们迁移到使用 androidx 库时,噗,它停止工作了。嗯,确实起到了一点作用。\xe2\x80\x9c更多...\xe2\x80\x9d 按钮被隐藏,但之前隐藏的选项没有显示。\n因为,我花了很多小时才解决这个问题,并避免其他人头痛,我会解释一下问题和解决方案。

\n\n

在这种情况下要做的第一件事就是查看源代码。由于代码是开源的,我可以在 github …

android navigation-drawer android-navigation android-navigationview

1
推荐指数
1
解决办法
446
查看次数

NavHostFragment 在 onDestroyView 中崩溃

我有一个Activity带有 aFragmentContainerViewBottomNavigationView设置的应用程序:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <LinearLayout
        android:id="@+id/layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <androidx.fragment.app.FragmentContainerView
            android:id="@+id/nav_host_fragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            app:defaultNavHost="true"
            app:navGraph="@navigation/splash" />

        <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/bottom_navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/white"
            android:visibility="gone"
            app:elevation="12dp"
            app:labelVisibilityMode="unlabeled"
            app:menu="@menu/menu_bottom_nav_main" />
    </LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)

当用户进入应用程序时,我需要显示一个启动页面(如果需要,还需要登录),然后将其导航到主页。所以我创建了 4 个导航图,1 个用于飞溅,3 个用于底部导航。我正在使用android 示例中的这种灭绝来设置带有 3 个图形的底部导航。这是我的MainActivity代码:

@AndroidEntryPoint
class MainActivity : BaseActivity<ActivityMainBinding, MainViewModel>(
    R.layout.activity_main,
    MainViewModel::class,
) {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (!vm.splashPassed) {
            val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
            currentNavController = MutableLiveData(navHostFragment.navController) …
Run Code Online (Sandbox Code Playgroud)

android android-fragments kotlin android-navigationview

1
推荐指数
1
解决办法
1586
查看次数