如何创建垂直BottomNavigationView android?

时间:2018-03-12 11:57:28

标签: android android-layout android-fragments

我的活动顶部有4个片段,BottomNavigationView底部有4个项目。它在移动设备上运行良好。当我使用LANDASCAPE去平板电脑时,我想将BottomNavigationView移动到活动的左侧,垂直方向如下所示。

使用BottomNavigationView可以实现这个目标,还是应该使用NavigationMenu android。

enter image description here

5 个答案:

答案 0 :(得分:1)

由于您无法自定义BottomNavigation以便垂直使用,因此我建议(如果您仍然无法解决问题的话)切换到该库:SideMenu-Android 或者,您可以创建自定义的导航抽屉。

答案 1 :(得分:1)

好吧,我通过调整方向更改和移动了一些视图来做到了,这就是BottomNavigationView想要的。 首先,为了改变方向,我将其添加到了AndroidManifest的Activity标签中

android:configChanges="orientation|screenSize"

在我的活动中,我添加了

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
            BottomNavigationView navigation= (BottomNavigationView) findViewById(R.id.navigation);
            navigation.setRotation(90f);
            navigation.getLayoutParams().width=480;
            navigation.requestLayout();
            navigation.setY(600f);
            navigation.setX(-435f);
           // navigation.requestLayout();
            BottomNavigationMenuView menuView = (BottomNavigationMenuView) navigation.getChildAt(0);
            for (int i = 0; i < menuView.getChildCount(); i++) {
                final View iconView = menuView.getChildAt(i);
                iconView.setRotation(-90f);
            }
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
            recreate();
        }
    }

我的XML是

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        android:text="@string/title_home"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/navigation"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:background="?android:attr/windowBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/navigation" />

</android.support.constraint.ConstraintLayout>

当然,您必须根据手机的需要更改navigation.getLayoutParams()。width,setX和setY。您可以创建一个函数来计算位置。抱歉,它是在白天的10:30,并且整夜都在编码,所以要休息一下,所以无法编写该函数。但是,如果您愿意,我会编写该函数。它是我为手机Vivo Y51L工作的内容,您可以查看屏幕截图。

屏幕截图 Landscape Portrait

答案 2 :(得分:0)

   <item 
    android:id="@+id/text"
    android:title="@string/about"
    android:icon="@android:drawable/ic_menu_info_details"
    app:showAsAction="never"/>

app:showAsAction="never"放入evey菜单项并尝试...

答案 3 :(得分:0)

我担心BottomNavigationView仅处理页面导航的底部,您应该创建自己的自定义抽屉或使用菜单in this link中的一个 如果这些操作没有帮助,您可以进一步了解this documentation,了解如何处理不同的布局

希望这会有所帮助

答案 4 :(得分:-1)

您不能将BottomNavigationView移动到布局的左侧区域。

BottomNavigationView不符合平板电脑材料设计规范

唯一的方法是您需要像

一样在开始时检查屏幕方向
if (islandcape()){

//Create the Navigation view layout here.. 

}else{

//Create the BottomNavigationView layout here .. 

}

注意:您需要编写一个函数来检查方向并替换上面代码中的 islandcape()

还可以尝试下面的波纹管库,它可以很好地完成这项工作。

Iiro Krankka https://github.com/roughike/BottomBar

enter image description here