Android 如何更改特定底部栏导航项的大小和形状
我正在尝试实现这个底部栏,它包含一个比其他栏更大、形状不同的项 使用本机底部导航组件是否有一种非黑客方式来实现这一点?我猜不是因为它似乎不符合材料设计规范 否则,最好的方法是什么?我认为只有两种方法可以做到这一点,但在我看来没有一种是可靠的Android 如何更改特定底部栏导航项的大小和形状,android,android-bottomnav,Android,Android Bottomnav,我正在尝试实现这个底部栏,它包含一个比其他栏更大、形状不同的项 使用本机底部导航组件是否有一种非黑客方式来实现这一点?我猜不是因为它似乎不符合材料设计规范 否则,最好的方法是什么?我认为只有两种方法可以做到这一点,但在我看来没有一种是可靠的 对于每个“小项目”,在绘图顶部添加一个透明条,以达到相机图标的大小 在中间设置一个5个“底部项目”的底部栏,在上面我可以放置其他组件。这将要求该部件与底杆连接 编辑 这是我通过增加图标大小得到的,正如Harshit和Fmacaroni所建议的 未选择项
- 对于每个“小项目”,在绘图顶部添加一个透明条,以达到相机图标的大小
- 在中间设置一个5个“底部项目”的底部栏,在上面我可以放置其他组件。这将要求该部件与底杆连接
可以通过编程方式更改底部栏导航中的图标大小
BottomNavigationView bottomNavigationView = (BottomNavigationView)
activity.findViewById(R.id.bottom_navigation_view);
BottomNavigationMenuView menuView = (BottomNavigationMenuView)
bottomNavigationView.getChildAt(0);
for (int i = 0; i < menuView.getChildCount(); i++) {
final View iconView =
menuView.getChildAt(i).findViewById(android.support.design.R.id.icon);
final ViewGroup.LayoutParams layoutParams = iconView.getLayoutParams();
final DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
// set your height here
layoutParams.height = (int)
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, displayMetrics);
// set your width here
layoutParams.width = (int)
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, displayMetrics);
iconView.setLayoutParams(layoutParams);
}
BottomNavigationView BottomNavigationView=(BottomNavigationView)
activity.findViewById(R.id.bottom\u navigation\u view);
BottomNavigationMenuView菜单视图=(BottomNavigationMenuView)
bottomNavigationView.getChildAt(0);
对于(int i=0;i
我这样做是为了根据需要更改底部栏导航项的大小
以下是您可以做的:
BottomNavigationView bottomNavigationView = (BottomNavigationView) activity.findViewById(R.id.bottom_navigation_view);
BottomNavigationMenuView menuView = (BottomNavigationMenuView) bottomNavigationView.getChildAt(0);
for (int i = 0; i < menuView.getChildCount(); i++) {
final View iconView = menuView.getChildAt(i).findViewById(android.support.design.R.id.icon);
final ViewGroup.LayoutParams layoutParams = iconView.getLayoutParams();
final DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
// If it is my special menu item change the size, otherwise take other size
if (i == 2){
// set your height here
layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, displayMetrics);
// set your width here
layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, displayMetrics);
}
else {
// set your height here
layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, displayMetrics);
// set your width here
layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, displayMetrics);
}
iconView.setLayoutParams(layoutParams);
}
BottomNavigationView BottomNavigationView=(BottomNavigationView)activity.findViewById(R.id.bottom\u navigation\u视图);
BottomNavigationMenuView menuView=(BottomNavigationMenuView)bottomNavigationView.getChildAt(0);
对于(int i=0;i
经过几次研究后,我发现。他们没有提供我想要的,但是他们在他们的一个示例中实现了,这与我需要的非常接近
这就是我通过重用他们的想法(仅在API 23上测试)得到的结果:
自上次材料更新(2018年)以来,可以使用本机UI元素:
带有BottomAppBar
属性app:fabAttached
与底部AppBar相关的FloatingActionButton
app:layout\u锚定
- 使用
app:fabAlignmentMode
希望它能帮助你 最简单的方法是使用setScaleX和setScaleY。例如:
final View iconView =
menuView.getChildAt(2).findViewById(android.support.design.R.id.icon);
iconView.setScaleY(1.5f);
iconView.setScaleX(1.5f);
还要将android:clipChildren=“false”添加到根布局您想要一个库,还是只需要代码来更改项目的大小?@HarshitAgrawal如果已经有一个库能够做到这一点,那将是完美的,否则,我正在寻找最干净的编码方法。请看下面我的答案,我正在键入一个代码:)检查@Louis OK Louis let methink@Louis看看我编辑过的答案。希望这个图书馆对你有所帮助。请务必让我知道进一步的问题。如果这有助于您接受此问题的答案,以便其他前来寻找相同问题的用户也能得到帮助。:)我想用另一种方法来解决你的问题。首先让我知道这个库的反馈是否解决了问题。我看了一下,但没有发现任何对我的用例有用的东西,无论如何,谢谢!不能像BottomNavigationView使用BottomAppBar那样定位项目。它将作为选项的工具栏,而不是导航组件。这不是一个解决方案,答案不能回答问题。菜单项不显示
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_alignParentBottom="true"
android:background="?android:attr/windowBackground"
app:itemIconTint="@color/colorPrimary"
app:itemTextColor="@android:color/black"
app:menu="@menu/navigation"
android:clipChildren="false">
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_gravity="center"
android:layout_marginBottom="8dp"
app:elevation="6dp"
android:scaleType="center" />
</android.support.design.widget.BottomNavigationView>