标签: android-navigationview

Android设计支持库导航视图自定义

我对新的导航视图有几个问题.

1)滚动导航视图会滚动整个视图,但我只想让标题留在它的位置并滚动导航项.

在此输入图像描述

2)要实现分频器黑白导航项目,我可以这样做:

<item
android:id="@+id/navigation_subheader"
android:title="@string/navigation_subheader">
<menu>
    <item
        android:id="@+id/navigation_sub_item_1"
        android:icon="@drawable/ic_android"
        android:title="@string/navigation_sub_item_1"/>
    <item
        android:id="@+id/navigation_sub_item_2"
        android:icon="@drawable/ic_android"
        android:title="@string/navigation_sub_item_2"/>
</menu>
</item>
Run Code Online (Sandbox Code Playgroud)

但如果没有副标题,它就不起作用.我试图给它一个空白字符串,但只留下一个垂直空格而不是副标题.我需要由分隔符分隔的导航项组,但没有子标题.

3)动态操作导航项.在此之前,我曾经使用垂直列表视图作为导航项.我只是将可见性设置为我不想要的任何导航项目.如何动态更改导航项?

android navigation-drawer android-design-library androiddesignsupport android-navigationview

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

正确创建与 dpad 兼容的 UI

我想开发一个即使使用 dpad 也能 100% 运行的应用程序,但不适用于电视设备,所以我不想依赖 Leanback 库。我已经遵循了这里的指南,以便集中我的 UI 的正确元素。

\n\n

我正在使用支持设计库,但我的设计遇到了一些问题NavigationView

\n\n
    \n
  • 当我第一次打开抽屉时,它检查了第一个项目,但聚焦了另一个项目
  • \n
  • 如果我关闭并再次打开抽屉,则不会检查任何项目并且焦点会丢失
  • \n
\n\n

这就是我正在做的处理焦点的事情:

\n\n
private void initDrawer(){\n    drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);\n    navigationView = (NavigationView)findViewById(R.id.navigation_view);\n    navigationView.setNavigationItemSelectedListener(this);\n    drawerToggle = new ActionBarDrawerToggle(MainActivity.this, drawerLayout, R.string.app_name, R.string.app_name){\n        @Override\n        public void onDrawerOpened(View drawerView) {\n            super.onDrawerOpened(drawerView);\n            //This is not working properly\n            navigationView.requestFocus();\n        }\n\n        @Override\n        public void onDrawerClosed(View drawerView) {\n            super.onDrawerClosed(drawerView);\n            //This seems to work\n            mContentLayout.requestFocus();\n        }\n    };\n    drawerLayout.setDrawerListener(drawerToggle);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这就是我正在做的使用硬件按钮切换抽屉打开/关闭的操作:

\n\n
@Override\npublic boolean onKeyUp(int keyCode, KeyEvent event){\n    if(keyCode==KeyEvent.KEYCODE_BUTTON_Y){\n …
Run Code Online (Sandbox Code Playgroud)

android android-support-library androiddesignsupport android-navigationview

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

在NavigationView中滚动动画

我的活动NavigationView里面有一个DrawerLayout.

当用户点击NavigationView标题中的按钮时,我想滚动到顶部DrawerLayout/NavigationView带有动画.

看起来NavigationView和DrawerLayout没有提供获取实际滚动位置的方法(getScrollY()并且getScrollX()总是返回0),所以我不能这样做.

如何使用动画滚动到顶部?

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

     <!-- My content -->

     <android.support.design.widget.NavigationView
         android:id="@+id/navigation"
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:layout_gravity="start"
         app:headerLayout="@layout/navigation_view_header"
         app:menu="@menu/my_navigation_items" />
 </android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

android scroll android-animation drawerlayout android-navigationview

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

如何将Click事件添加到Android的NavigationView上的项目

我正在尝试NavigationDrawer在我的Android项目中实现补充工具栏.为此,我已经习惯NavigationViewDrawerLayout.要显示我使用菜单的项目.我想在添加的菜单项上添加click事件.

代码:在导航菜单中 -

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/nav_account" android:title="My Account"/>
    <item android:id="@+id/nav_settings" android:title="Settings"/>
    <item android:id="@+id/nav_layout" android:title="Log Out"/>
</menu>
Run Code Online (Sandbox Code Playgroud)

在视图中:

<android.support.design.widget.NavigationView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        app:menu="@menu/navigation_menu"
        android:layout_gravity="start" />
Run Code Online (Sandbox Code Playgroud)

android android-navigationview

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

导航抽屉的圆角背景项目

我想为导航抽屉中的项目提供一个圆角,如下所示:

在此处输入图片说明

这是material.io网站上的材料设计示例

可能吗 ?

android navigation-drawer android-navigationview material-components material-components-android

4
推荐指数
3
解决办法
1520
查看次数

迁移到AndroidX后,膨胀com.google.android.material.navigation.NavigationView类时出错

我在我的项目更新后AndroidXtargetSdkVersion设置为28,我的项目上崩溃从商店安装它的beta测试。

以下是我收到的错误日志:

2019-07-08 08:28:33.026 32011-32011/? E/AndroidRuntime: FATAL EXCEPTION: main Process: hu.itq.oakprotection, PID: 32011
        java.lang.RuntimeException: Unable to start activity ComponentInfo{hu.itq.oakprotection/hu.itq.oakprotection.MainActivity}: android.view.InflateException: Binary XML file line #15: Binary XML file line #15: Error inflating class com.google.android.material.navigation.NavigationView
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3194)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
            at android.app.ActivityThread.-wrap12(Unknown Source:0)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
            at android.os.Handler.dispatchMessage(Handler.java:108)
            at android.os.Looper.loop(Looper.java:166)
            at android.app.ActivityThread.main(ActivityThread.java:7425)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
         Caused by: android.view.InflateException: Binary XML file line #15: Binary XML file line #15: Error inflating class com.google.android.material.navigation.NavigationView
         Caused by: android.view.InflateException: …
Run Code Online (Sandbox Code Playgroud)

android android-navigationview androidx

4
推荐指数
2
解决办法
1691
查看次数

在片段内使用带有单个活动、布局抽屉和工具栏的 Android 导航组件

是否可以在每个片段都有自己的工具栏的单个活动应用程序中使用 Android 导航组件/图形?

此外,容器活动有一个导航抽屉,需要设置工具栏和导航控制器,但在活动创建时我还没有工具栏。

我正在使用此代码(在 onCreate 中调用)

    private fun setupNavigation() {

//        val toolbar = findViewById<Toolbar>(R.id.toolbar);
//        setSupportActionBar(toolbar);
//        supportActionBar!!.setDisplayHomeAsUpEnabled(true);
//        supportActionBar!!.setDisplayShowHomeEnabled(true);

    val drawerLayout = findViewById<DrawerLayout>(R.id.drawer_layout);

    val navigationView = findViewById<NavigationView>(R.id.drawer_navigation_view);

    val navController = Navigation.findNavController(this, R.id.navigation_host_fragment);

    NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout)

    NavigationUI.setupWithNavController(navigationView, navController)

    navigationView.setNavigationItemSelectedListener(this)
}
Run Code Online (Sandbox Code Playgroud)

但是由于我当时没有工具栏,它会引发错误(在空对象上调用 ActionBar.setTitle)。

是否有可能有这个,或者我需要放弃在这种情况下使用导航组件的想法?

android navigation-drawer android-navigation android-navigationview android-architecture-navigation

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

带有导航图的导航抽屉不起作用

我尝试通过导航抽屉活动创建一个新项目。使用视图模型自动生成片段。单击导航菜单时,它不会导航到相应的片段。

构建.gradle

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.navigation:navigation-fragment:2.0.0'
    implementation 'androidx.navigation:navigation-ui:2.0.0'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
Run Code Online (Sandbox Code Playgroud)

主Activity.class

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        // Passing each menu …
Run Code Online (Sandbox Code Playgroud)

android navigation-drawer android-navigationview android-navigation-graph

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

具有多个组的NavigationView基于Condition隐藏和显示组

我有NavigationView多个组,这是基于我需要隐藏和显示组的一些条件.我怎么能做到这一点.

我的示例NavigationView菜单

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

 <group android:checkableBehavior="single"
        android:id="@+id/grp_employee"
        >

        <item
            android:id="@+id/help"
            android:checked="false"
            android:icon="@drawable/ic_help"
            android:title="@string/app_name" />

.......
</group>

<group android:checkableBehavior="single"
        android:id="@+id/grp_admin"
        >

        <item
            android:id="@+id/admin_help"
            android:checked="false"
            android:icon="@drawable/ic_help"
            android:title="@string/app_name" />

.......
</group>

<group> ... </group>

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

这是我的NavigationView文件.我只想一次只显示一个组视图隐藏所有其他组.

android navigationview android-support-design android-navigationview

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

替换导航视图项波纹效果

我试图替换我认为是NavigationView. 所以我创建了一个 drawable 来替换背景并使用itemBackground属性应用它。

background_navigation_view_item.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/navigation_item_background_tint">
    <item android:id="@android:id/mask" android:top="4dp" android:bottom="4dp" android:left="8dp" android:right="8dp">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white"/>
            <corners android:radius="3dp"/>
        </shape>
    </item>
    <item android:top="4dp" android:bottom="4dp" android:left="8dp" android:right="8dp">
        <selector>
            <item android:state_checked="true">
                <shape android:shape="rectangle">
                    <solid android:color="@color/navigation_item_background_tint"/>
                    <corners android:radius="3dp"/>
                </shape>
            </item>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="@android:color/transparent"/>
                    <corners android:radius="3dp"/>
                </shape>
            </item>
        </selector>
    </item>
</ripple>
Run Code Online (Sandbox Code Playgroud)

当项目被选中时,项目背景可绘制看起来很棒(“选择控件”是下图中的选定项目)。但被点击该项目时(“进度指标”下文)看来该默认波纹绘制两者所述background_navigation_view_item.xml可绘制正在使用(仅一个圆角矩形应该显示,而不是周围的矩形)。

导航视图波纹效果

我还测试了 drawable 作为可检查视图的背景,它的工作方式符合我的预期。因此,如果我的可绘制对象的代码中没有错误,为什么不替换原始背景可绘制对象?

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

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