代码之家  ›  专栏  ›  技术社区  ›  RediOne1

BottomAppBar,其中BottomNavigationDrawer连接到NavigationController

  •  3
  • RediOne1  · 技术社区  · 6 年前

    • MainFragment BottomNavigationDrawer
    • 当用户选择某个菜单项,或单击 他被转移到另一个片段,比方说 DebtDetailsFragment . 那么汉堡包就应该用“后箭头”代替了 NavigationController

    下面我贴上了我的 MainActivity 代码。当我用导航控制器注释行时,汉堡包图标是可见的 能够显示。

    但当我取消这行的注释时,汉堡就消失了,因为 导航控制器 NavigationView 底部导航抽屉 DrawerLayout 所以控制员认为不需要汉堡包。

    方法 setupWithNavController 抽屉布局 作为我不使用的参数。

    此方法的文档:

    当您在非根目标上时,工具栏还将显示向上按钮,当您在根目标上时,工具栏将显示抽屉图标,并在它们之间自动设置动画。单击导航图标时,此方法将调用[DrawerLayout.navigateUp]。

    导航控制器 BottomAppBar 但是没有 ? 我要自己动手做汉堡包 onOptionsItemSelected 方法。


    class MainActivity : BaseActivity() {
    
        @Inject
        lateinit var viewModelProvider: ViewModelProvider.Factory
    
        private val viewModel: MainActivityViewModel by lazy {
            ViewModelProviders.of(this, viewModelProvider).get(MainActivityViewModel::class.java)
        }
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            setSupportActionBar(bottomAppBar)
            val navController = findNavController(R.id.main_nav_host_fragment)
            //bottomAppBar.setupWithNavController(navController)
    
            onDestroyDisposables += viewModel.uiStateObservable
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(::render, Timber::e)
        }
    
        override fun onCreateOptionsMenu(menu: Menu): Boolean {
            menuInflater.inflate(R.menu.bottomappbar_menu, menu)
            return true
        }
    
        override fun onOptionsItemSelected(item: MenuItem?): Boolean {
            when (item?.itemId) {
                android.R.id.home -> {
                    val bottomNavDrawerFragment = BottomNavigationDrawerFragment()
                    bottomNavDrawerFragment.show(supportFragmentManager, bottomNavDrawerFragment.tag)
                }
            }
            return super.onOptionsItemSelected(item)
        }
    
        override fun onSupportNavigateUp(): Boolean {
            return findNavController(R.id.main_nav_host_fragment).navigateUp()
        }
    }
    

    Without setted Navigation controller

    底部导航抽屉

    BottomNavigationDrawer

    带导航控制器-汉堡包隐形。

    With NavigationController

    1 回复  |  直到 6 年前
        1
  •  3
  •   ianhanniballake    6 年前

    这个 BottomAppBar 决不应按显示向上按钮 anatomy of the BottomAppBar -它应该只显示抽屉图标。如图所示 behavior documentation ,向上按钮应显示在顶部 Toolbar .

    bottomAppBar.setupWithNavController(navController) ,但不是打电话 setupWithNavController(navController) 工具栏 你有。

    底部AppBar handle clicks on the drawer icon 你自己。

    这个 DrawerArrowDrawable 类提供正确的抽屉图标:

    val icon = DrawerArrowDrawable(bottomAppBar.context)
    bottomAppBar.navigationIcon = icon
    
        2
  •  0
  •   Dilanka Laksiri    5 年前

    主活动.java

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            BottomAppBar bottomAppBar = findViewById(R.id.bottomAppBar);
            setSupportActionBar(bottomAppBar);
    
            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();
                }
            });
    
            NavigationView navigationView = findViewById(R.id.nav_view);
            NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
            NavigationUI.setupWithNavController(navigationView, navController);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
        public boolean onSupportNavigateUp() {
            NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
            DrawerLayout drawer = findViewById(R.id.drawer_layout);
            return NavigationUI.navigateUp(navController, drawer)
                    || super.onSupportNavigateUp();
        }
    }
    

    活动\u main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.drawerlayout.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" />
    
        <com.google.android.material.navigation.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" />
    
    </androidx.drawerlayout.widget.DrawerLayout>
    

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.coordinatorlayout.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">
    
        <include layout="@layout/content_main" />
    
        <com.google.android.material.bottomappbar.BottomAppBar
            android:id="@+id/bottomAppBar"
            android:layout_width="match_parent"
            android:layout_height="?actionBarSize"
            android:layout_gravity="bottom"
            app:fabCradleVerticalOffset="16dp"
            app:navigationIcon="@drawable/ic_baseline_menu_24"
            app:navigationContentDescription="@string/nav_header_desc"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            style="@style/Widget.MaterialComponents.BottomAppBar.Colored"/>
    
        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_menu_send"
            app:layout_anchor="@id/bottomAppBar"/>
    
    </androidx.coordinatorlayout.widget.CoordinatorLayout>
    

    enter image description here

    推荐文章