gpt4 book ai didi

android - 具有透明背景的 BottomAppBar 内的 BottomNavigationView

转载 作者:行者123 更新时间:2023-12-03 13:26:05 24 4
gpt4 key购买 nike

我一直在将新的(ish) Material BottomAppBar 与标准的 BottomNavigationView 结合起来。我的xml是这样的:

      <com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/bottom_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
app:fabAlignmentMode="center">

<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="@android:color/transparent"
app:itemTextAppearanceActive="@style/AppTheme.Text.BottomNavText.Active"
app:itemTextAppearanceInactive="@style/AppTheme.Text.BottomNavText"
app:labelVisibilityMode="labeled"
app:menu="@menu/bottom_nav_menu" />

</com.google.android.material.bottomappbar.BottomAppBar>

在以前的版本 - 1.0.0 - 这工作正常,我仍然可以按预期看到 FAB 插图。唯一的小缺点是这个版本的 Material 组件库没有对底部应用栏的高度效果进行排序,因此栏和上面的内容之间的区别并不明显。

当我升级到最新的库时,我认为在撰写本文时是 implementation 'com.google.android.material:material:1.1.0-alpha09' ,我得到了BottomAppBar 高程效果,但是当我将透明背景应用到BottomNavigationView 时,我得到了一种非常奇怪的视觉效果,这对我来说是我一生无法理解的。

Strange BottomAppBar effect

如果我删除透明背景颜色,效果会消失,但我会丢失 FAB 插图,如下所示:

Bottom Nav without transparency, lose the inset effect

如果我完全删除底部导航 View 子项,并且只有 BottomAppBar,我会看到正常的视觉效果,但没有我的导航:

Without the bottom nav view as child, all works normal

我会喜欢:
- 一个很好的解决方案,将底部导航 View 合并到 BottomAppBar 中,同时保留 1.1.0 版库的良好提升效果,并且在其中有效地使用 BottomNavigationView,因此我保留了该导航组件的所有好处
- 或者解释究竟是什么导致了这种特殊的第一高程效应,理想情况下是一种修复它的方法

最佳答案

好的,这与BottomAppBar无关......背景问题发生在BottomNavigationView上,无论它在哪里,在 Material 库1.1.0-......

这是(我认为)最新版本的 BottomNavigationView 的一个错误,它设置了一个 tintable MaterialShapeDrawableBackground如果背景为 null 或 ColorDrawable,则作为其背景...并且当您在 xml 中设置颜色时,它 是 ColorDrawable (包括透明)。这是 BottomNavigationView 代码中的问题:

    if (getBackground() == null || getBackground() instanceof ColorDrawable) {
// Add a MaterialShapeDrawable as background that supports tinting in every API level.
ViewCompat.setBackground(this, createMaterialShapeDrawableBackground(context));
}

这得到了你在上面看到的随机阴影形状。

解决方案

解决方法是在 xml 中设置一个既不是 null 也不是 ColorDrawable 的背景。我创建了自己的可绘制对象,它只是一个透明矩形,并将其设置为 BottomNavigationView 背景,并且它可以工作。

background_transparent.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="10dp"
android:shape="rectangle" >

<solid android:color="#00000000" />

</shape>

现在更新的 BottomNavigationView xml:
        <com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
style="@style/BottomNav"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="@drawable/background_transparent"
app:itemTextAppearanceActive="@style/AppTheme.Text.BottomNavText.Active"
app:itemTextAppearanceInactive="@style/AppTheme.Text.BottomNavText"
app:labelVisibilityMode="labeled"
app:menu="@menu/bottom_nav_menu" />


结果:

enter image description here

关于android - 具有透明背景的 BottomAppBar 内的 BottomNavigationView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57785720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com