标签: android-navigationview

当调用onDrawerOpened()时,将特定menuItem滚动到navigationView的顶部

我在DrawerLayout中使用NavigationView(android.support.design.widget.NavigationView).我想知道当用户打开抽屉时是否还有以编程方式滚动特定项目.(同时在活动中调用onDrawerOpened())

例如,当用户打开抽屉时,我想在DrawerLayout(滚动到顶部)顶部的MenuItem"action_feedback".

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
    <item
        android:id="@+id/action_current_list"
        android:checked="true"
        android:icon="@drawable/ic_current_list"
        android:title="@string/current_list" />
    <item
        android:id="@+id/action_manage_lists"
        android:icon="@drawable/ic_my_lists"
        android:title="@string/my_lists" />
    <item
        android:id="@+id/action_search_products"
        android:icon="@drawable/ic_search_black_24dp"
        android:title="@string/search_products" />
    <item
        android:id="@+id/action_deals"
        android:icon="@drawable/ic_product_promo"
        android:title="@string/deals" />
</group>
<group android:id="@+id/nav_footer"
        android:checkableBehavior="single">
    <item
        android:id="@+id/action_feedback"
        android:icon="@drawable/ic_feeback"
        android:title="@string/feedback" />
    <item
        android:id="@+id/action_sign_out"
        android:icon="@drawable/ic_sign_out"
        android:title="@string/sign_out" />
</group>
Run Code Online (Sandbox Code Playgroud)

之前我在DrawerLayout中使用了自定义布局(ScrollView + ListView),并且可以使用scrollView.scrollTo(x,y).

提前致谢.

android navigationview android-navigationview

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

Android NavigationView 抽屉未关闭

实现 NavigationView 抽屉 - 我能够生成抽屉并查看它,但无法通过滑动关闭它。此外,NavigationItemSelectedListener 似乎未正确设置,因为我无法检测到项目上的单击事件。

MainActivity.java

private NavigationView navigationView;
private DrawerLayout navDrawerLayout;
private ListView navDrawerList;
private ArrayList<NavDrawerItem> navDrawerItemList;
private ActionBarDrawerToggle navDrawerToggle;

    private void setupNavDrawer() {
    this.navigationView = (NavigationView) findViewById(R.id.navigation_view);
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            Utility.showDebugToast(String.valueOf(item.getItemId()));
            if(item.isChecked()) {
                item.setChecked(false);
            } else {
                item.setChecked(true);
            }
            navDrawerLayout.closeDrawers();
            return true;
        }
    });
    this.navDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    this.navDrawerList = (ListView) findViewById(R.id.left_drawer);
    this.navDrawerItemList = new ArrayList<>();
    this.navDrawerItemList.add(new NavDrawerItem("NAME", NavDrawerItemType.NAME));
    this.navDrawerItemList.add(new NavDrawerItem("Create Mesh", NavDrawerItemType.CREATE_MESH));
    this.navDrawerList.setAdapter(new NavDrawerAdapter(this, R.layout.drawer_item, R.id.drawer_tab_text, this.navDrawerItemList));

    this.navDrawerToggle = new …
Run Code Online (Sandbox Code Playgroud)

java xml android navigation-drawer android-navigationview

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

带有DrawerLayout setCheckedItem的NavigationView不起作用

我想NavigationView在应用启动时检查一项。但是我发现NavigationView.setCheckedItem(R.id.xxx)没有工作。我也尝试过navigationView.getMenu().findItem(R.id.xxx).setChecked(true),同样的结果。

我已经将checkableBehavior设置为single。

<item android:title="@string/sliding_menu_group_places">
        <menu>
            <group android:checkableBehavior="single">
                <item
                    android:id="@+id/xxx"
                    android:icon="@drawable/xxx"
                    android:title="@string/xxx" />

                <item
                    android:id="@+id/xxx"
                    android:icon="@drawable/xxx"
                    android:title="@string/xxx" />

                ...
            </group>
        </menu>
    </item>
Run Code Online (Sandbox Code Playgroud)

但是有一种方法可以工作:

drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
        }

        @Override
        public void onDrawerOpened(View drawerView) {
            navigationView.setChecked(R.id.xxx);
        }

        @Override
        public void onDrawerClosed(View drawerView) {
        }

        @Override
        public void onDrawerStateChanged(int newState) {
        }
    });
Run Code Online (Sandbox Code Playgroud)

导航项将在onDrawerOpened回调中进行检查。我在stackoverflow中进行了大量搜索,但没有一种方法适合我。谁能帮我这个忙。

编辑1

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

<group android:checkableBehavior="single">
    <item
        android:id="@+id/xxx"
        android:icon="@drawable/xxx"
        android:title="@string/recent_display_name" />

    <item android:title="@string/sliding_menu_group_places">
        <menu>
            <group android:checkableBehavior="single"> …
Run Code Online (Sandbox Code Playgroud)

android drawerlayout android-navigationview

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

哪里可以在Drawer MainActivity中找到ViewById?

我正在使用Android Studio模板进行抽屉导航.我想在抽屉的标题中添加一个click事件,但是当我尝试在onCreate()方法中找到ViewById时,我得到一个null异常.我猜它是因为它尚未膨胀.

有趣的是,drawer_layout上的findViewById 和nav_view返回了一个对象.我试着这样做:

drawer.findViewById;
Run Code Online (Sandbox Code Playgroud)

还有这个:

navigationView.findViewById;
Run Code Online (Sandbox Code Playgroud)

但这仍然是一个例外.

所以我的问题有两个:

  1. 为什么是它findViewByIddrawer_layoutnav_view而findViewById上返回的对象iv_profile没有?
  2. 在这种情况下,我在哪里以及如何避免NullPointerException?

MainActivity.java

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) 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 = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new …
Run Code Online (Sandbox Code Playgroud)

android android-navigationview

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

Not highlighting selected child item from navigationview

I have a NavigationView & rendering Menu inside it. My Menu has 3 groups & each contains few sub-menu items. My problem is, when I select any sub-menu item & goes to specific fragment. However, when I reopen NavigationView/drawer to select another item, it doesn't show last selected item Highlighted.

Currently, it just changes color of selected sub-menu item but I want it highlighted like below snapshot.

在此处输入图片说明

Base Activity XML

<?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" …
Run Code Online (Sandbox Code Playgroud)

android android-menu android-fragments navigation-drawer android-navigationview

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

更改菜单操作布局值?

navigationView.getHeaderView(0);我有一个导航抽屉,我可以通过访问和来更改字体、颜色等。

Menu m = navigationView.getMenu();
MenuItem mi = m.getItem(index);
Run Code Online (Sandbox Code Playgroud)

然后我就可以玩抽屉里的东西了。

但就我而言,我有一个文本视图,它是另一种布局:

<item
        android:id="@+id/nav_wallet"
        android:icon="@drawable/ic_balnce"
        android:title="@string/my_wallet"
        app:actionLayout="@layout/wallet_value"/>
Run Code Online (Sandbox Code Playgroud)

在我的 wallet_value 中,layout我有一个 textView,我需要更改其值,如下图所示:

在此输入图像描述

我怎样才能得到这个布局并改变它?

android android-layout android-menu android-drawer android-navigationview

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

Android - 如何更改 NavigationView 的状态栏颜色?

我已经尽我所能来实现这个功能,但失败了,“drawerLayout.setStatusBarBackground()”不起作用,“android:windowTranslucentStatus:true”不起作用。

在这里,第一张图片是我现在可以做的,第二张是想要的效果:

我现在能做的

想要的效果

非常感谢。

android navigation-drawer android-styles android-statusbar android-navigationview

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

在菜单项 xml 之间添加水平视图(线)

我正在使用导航视图、标签菜单和项目,我想在每个选项项目之间添加线条。这是我的菜单:

<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_camera"
        android:icon="@drawable/ic_menu_camera"
        android:title="Import" />
    <item
        android:id="@+id/nav_gallery"
        android:icon="@drawable/ic_menu_gallery"
        android:title="Gallery" />
    <item
        android:id="@+id/nav_slideshow"
        android:icon="@drawable/ic_menu_slideshow"
        android:title="Slideshow" />
    <item
        android:id="@+id/nav_manage"
        android:icon="@drawable/ic_menu_manage"
        android:title="Tools" />
</group>
Run Code Online (Sandbox Code Playgroud)

我不太清楚这个项目是如何工作的,也不知道为什么我们不能从 XML 中放入其他类别的标签。

xml android navigationview android-navigationview

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

修复了滚动项目时导航抽屉中的导航标题

当前状态:NavigationDrawer带有NavigationHeader和NavigationMenu项目.这些项目的数量很大,因此需要滚动才能访问底部的项目.

要求:当向下滚动到底部时,NavigationHeader应保持固定

这是我的activity_main布局文件

<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/app_bar_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<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"
    android:background="#00000000"
    app:headerLayout="@layout/nav_header_main"
    app:menu="@menu/activity_main_drawer"
    />

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

这是我的navigation_header_main布局文件

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="vertical"
android:background="#3d3b3b"

android:theme="@style/ThemeOverlay.AppCompat.Dark">

<android.support.v7.widget.AppCompatImageView
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:src="@drawable/categories"
    android:padding="1dp"
    />

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

PS我是android dev的新手.如果需要,请询问更多资源

android navigation-drawer android-navigationview

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

Android 导航组件无法与对话框片段一起使用

免责声明:我已经检查了文档,因为2.1.0导航组件支持对话框片段。(https://developer.android.com/jetpack/androidx/releases/navigation#2.1.0

我遇到的错误

DialogFragment尝试从 a 转到my时出现此错误Start Destination

java.lang.IllegalStateException: Fragment PostDistressDialog{829f5d1} (bbbc4926-684b-491b-9772-e0f0ffebe0af)} not associated with a fragment manager.

PostDistressDialog是使用导航组件DialogFragment调用的JournalEntryFragment(可以在下面的地图中看到)。PostDistressDialog不是 的内部类JournalEntryFragment。它属于自己扩展的一类DialogFragment

我的导航图的图片

在此输入图像描述

函数调用 NavController

public class PostDistressDialog extends DialogFragment implements ISaveDatabase {

...

@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    if (getArguments()!=null) {

        ...

        // Set up the Alert Dialog
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(getContext());
        alertDialog.setTitle(R.string.distressed_levels);
        alertDialog.setMessage(R.string.distressed_how_feel_post);

        // Inflate and set the layout for …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-navigation android-navigationview

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