将小吃棒移到底部酒吧上方

我正面临着一些新底杆的问题。 我不能强迫将小吃棒移动到底部酒吧上方(这是设计指南告诉我的应该是https://www.google.com/design/spec/components/bottom-navigation.html#bottom-navigation-specs )。

这是我的activity_main.xml

     

这是我的app_bar_main_activity.xml

             

main_activity.java中的小吃店看起来像这样

 FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(findViewById(R.id.main_content), "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); 

错...小吃店应该在底部酒吧上面

替换你的xml – >

                

和小吃店代码将

 Snackbar.make(findViewById(R.id.placeSnackBar), "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); 

你可以通过改变快捷栏的边距来以编程方式完成这个工作,而不用额外的CoordinatorLayouts混淆你的xml。

Java示例:

 Snackbar snack = Snackbar.make(findViewById(R.id.coordinatorLayout), "Your message", Snackbar.LENGTH_LONG); CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) snack.getView().getLayoutParams(); params.setMargins(leftMargin, topMargin, rightMargin, bottomBar.height); snack.getView().setLayoutParams(params); snack.show(); 

Kotlin单行:

 Snackbar.make(coordinatorLayout, "Your message", Snackbar.LENGTH_LONG).apply {view.layoutParams = (view.layoutParams as CoordinatorLayout.LayoutParams).apply {setMargins(leftMargin, topMargin, rightMargin, bottomBar.height)}}.show() 

我正在使用目标操作系统kitkat,棒棒糖和棉花糖上设计支持库版本25.3.1的BottomNavigationView和Snackbar。 在棒棒糖和以上Snackbar隐藏在BottomNavigationView后面,但在Kitkat BottomNavigationView隐藏在Snackbar后面。

我试图用不同的方法展示Snackbar。 显示Snackbar时,使用translationY属性和Interpolator将BottomNavigationView在Y轴上翻译(向下滚动)。 Snackbar消失后,BottomNavigationView将再次显示具有相同的translationY属性。

隐藏BottomNavigationView(朝底部):

 CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) bottomNavigationView.getLayoutParams(); bottomNavigationView.animate().translationY(bottomNavigationView.getHeight() + layoutParams.bottomMargin).setInterpolator(new LinearInterpolator()).start(); 

在屏幕上显示BottomNavigationView:

 bottomNavigationView.animate().translationY(0).setInterpolator(new LinearInterpolator()).start(); 

假设你正在使用CoordinatorLayout,你可以在调用show()之前修改Snackbar的layoutparams。 通过设置anchorId和anchorGravity,snackBar将显示在底部导航栏上方:

 val layoutParams = snackbar.view.layoutParams as CoordinatorLayout.LayoutParams layoutParams.anchorId = R.id.navigation //Id for your bottomNavBar or TabLayout layoutParams.anchorGravity = Gravity.TOP layoutParams.gravity = Gravity.TOP snackbar.view.layoutParams = layoutParams