web-dev-qa-db-ja.com

標高(シャドウ)をBottomNavigationViewに追加するにはどうすればよいですか。デフォルトでは付属していません

標高をxmlとプログラムで両方から設定してみました。しかし、何も機能しません。 enter image description here

17
Javed Khatri

BottomNavigationViewでAndroid:backgroundを白に設定した場合にのみ機能します。

これは私のコードであり、機能しています:

<Android.support.design.widget.BottomNavigationView
    Android:id="@+id/bottom_navigation"
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:layout_gravity="bottom"
    Android:background="@color/white"
    app:elevation="8dp"
    app:itemIconTint="@color/bottom_color_state"
    app:itemTextColor="@color/bottom_color_state"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintHorizontal_bias="0.52"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:menu="@menu/bottom_navigation_main" />
33
nellorocca

私は解決策を得ました。標高とともに背景属性を追加する必要があります。そうしないと、影が表示されません。

2
Javed Khatri

興味のある方のために、背景のドローアブルを使って影をつけることもできました。しかし、私は白い色を使わなければなりませんでした、さもなければそれはうまくいきません...

私のように角度を付けたい場合に便利です。

drawable/gnt_rounded_corners_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <solid Android:color="@Android:color/white"/>

  <corners Android:bottomRightRadius="0dp"
      Android:bottomLeftRadius="0dp"
      Android:topLeftRadius="16dp"
      Android:topRightRadius="16dp" />
</shape>

および内部layout/main_activity.xml

    <com.google.Android.material.bottomnavigation.BottomNavigationView
        Android:id="@+id/navigation"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:background="@drawable/gnt_rounded_corners_shape"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu"
        Android:elevation="8dp"
        />

結果:

enter image description here

1
diAz

これは私のために働いた唯一の解決策です:

val background = bottomNavigation.background
if (background is MaterialShapeDrawable) {
    background.shadowCompatibilityMode = SHADOW_COMPAT_MODE_ALWAYS
}

ここで提案されているとおり: https://issuetracker.google.com/issues/124153644#comment2

1
M-WaJeEh