底部导航视图

时间:2019-01-12 11:29:45

标签: java android design-patterns bottomnavigationview

我正在尝试在应用程序中使用底部导航视图,但是由于它在底部导航视图中显示的项目数量似乎有所不同,因此无法正常使用

当我只有三个项目时,这就是视图。

behaves as i want

它显示为我想要的

但是当我将其设置为4时,视图就会变糟

not what i want

它不能扩展到适合屏幕边缘的位置,它只是位于屏幕中央。

下面是我的活动主要布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">


<android.support.design.widget.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <include
        android:id="@+id/main_app_bar"
        layout="@layout/app_bar_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</android.support.design.widget.AppBarLayout>

<FrameLayout
    android:id="@+id/frame_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />


<android.support.design.widget.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:layout_alignParentBottom="true"
    app:itemBackground="@color/colorPrimary"
    app:itemIconTint="@color/white"
    app:itemTextColor="@color/white"
    app:menu="@menu/navigation" />

</android.support.design.widget.CoordinatorLayout>

4 个答案:

答案 0 :(得分:1)

在底部导航视图中添加标签可见性模式

<android.support.design.widget.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    app:labelVisibilityMode="labeled" // this line
    android:background="@color/colorPrimary"
    app:itemBackground="@color/colorPrimary"
    app:itemIconTint="@color/white"
    app:itemTextColor="@color/white"
    app:menu="@menu/navigation" />

答案 1 :(得分:1)

BottomNavigationView具有条件:当有3个以上的项目时,请使用平移模式。  查看此答案。 Visit

答案 2 :(得分:0)

Bottom Navigation视图创建底部导航栏,使您只需单击一下即可轻松浏览和切换顶级内容视图。当应用程序具有三到五个顶级目标位置时,应使用底部导航视图。

将BottomNavigation视图和FrameLayout实施到XML布局文件中,即activity_main.xml:

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


    <FrameLayout
        android:id="@+id/viewlayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/bottom_navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:itemBackground="@color/colorAccent"
        android:layout_gravity="bottom"
        tools:elevation="2dp"
        app:itemTextColor="#fff"
        android:layout_alignParentBottom="true"
        app:menu="@menu/bottom_menu" />

</RelativeLayout>

实施底部导航视图的OnItemSelectedListener可以在不同的fragments之间进行切换:

bottomNavigationView.setOnNavigationItemSelectedListener(
            new BottomNavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                    Fragment fragment;
                    switch (item.getItemId()) {
                        case R.id.action_home:
                            fragment = home;
                            setTitle(item.getTitle());
                            break;
                        case R.id.action_msg:
                            fragment = msg;
                            setTitle(item.getTitle());
                            break;
                        case R.id.action_video:
                            fragment = video;
                            setTitle(item.getTitle());
                            break;
                        case R.id.action_info:
                        default:
                            fragment = noti;
                            setTitle(item.getTitle());
                            break;

                    }
                    fragmentManager.beginTransaction().replace(R.id.viewlayout, fragment).commit();
                    return true;
                }
            });




    // Set default selection
    bottomNavigationView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
    bottomNavigationView.setSelectedItemId(R.id.action_home);


}

查看此答案:How to create bottom navigation bar android ?

快乐编码...

答案 3 :(得分:-1)

由于您有三个以上的项目,因此可能必须禁用变速模式。请参阅问题How to disable BottomNavigationView shift mode?

中的分析器