web-dev-qa-db-ja.com

下部のソフトナビゲーションバーがリストビューと重なっています

Nexus 5(Android 5)でアプリを実行しましたが、下部のソフトナビゲーションバーがListViewの最後のアイテムと重なるという問題が発生しました。私のスタイルとListViewにfitsSystemWindowsを追加しようとしましたが、うまくいきませんでした。

私のレイアウトのXML:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:background="@color/sf4l"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent">

    <ListView Android:id="@id/Android:list"
        Android:layout_width="match_parent"
        Android:layout_height="fill_parent"
        Android:layout_weight="1"
        Android:background="@color/sf4l" />
</LinearLayout>
15
Bart Bergmans

これをthemes.xmlのvalues-v21dirに追加します。

<item name="Android:windowDrawsSystemBarBackgrounds">false</item>

例(アクションバーにAppCompatを使用しています):

<style name="Theme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="homeAsUpIndicator">@drawable/new_indicator</item>
    <item name="Android:homeAsUpIndicator">@drawable/new_indicator</item>
    <item name="actionModeBackground">@Android:color/black</item>
    <item name="Android:windowDrawsSystemBarBackgrounds">false</item>
</style>
43
Ken Cole

私はこの投稿で受け入れられた答えを試しましたが、多くの人と同じようにうまくいきませんでした。

しかし、私にとっては次の労働者。

  <item name="Android:windowTranslucentNavigation">false</item>

Styles-21.xmlに配置しました

ソフトナビゲーションバーの背景が無地になり、コンポーネントが正しくレンダリングされるようになりました。

3
Fouad

これは、listViewの高さが全画面の高さと同じですが、アクションバーがレイアウトを数ピクセル低く押して、ナビゲーションボタンによるレイアウトのオーバーラップを引き起こすためです。

これは、アクションバーの下にフルスクリーンのフラグメントコンテナがある場合にも発生します。

これを修正するには、画面とアクションバーの高さを測定してから、親ビューの高さをその差に設定します。例:

@Override
public void onWindowFocusChanged (boolean hasFocus) {
    LinearLayout lMain = (LinearLayout) findViewById(R.id.lMain);
    lMain.getLayoutParams().height = lMain.getHeight() - getNavigationBarHeight();
}
  • レイアウトがすでに描画/レンダリングされた後でこれを行う必要があります。 onCreateまたはonResumeでは早すぎます。 onWindowFocusChanged()でこれを行うのは、ちょっとやり過ぎかもしれませんが、機能します。
2
Alex Mensak

非常に簡単な解決策。 ConstraintLayoutを使用するだけです。 上面図の下端を底面図の上端に合わせます。

サンプルを以下に示します:-

xml:-

    <Android.support.constraint.ConstraintLayout 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/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity">

<ListView
    Android:id="@+id/list_item"
    Android:layout_width="0dp"
    Android:layout_height="0dp"
    Android:divider="@color/black"
    Android:dividerHeight="2dp"
    app:layout_constraintBottom_toTopOf="@+id/navigation"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="1.0"
    app:layout_constraintHorizontal_bias="1.0"></ListView>

<Android.support.design.widget.BottomNavigationView
    Android:id="@+id/navigation"
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:layout_marginEnd="0dp"
    Android:layout_marginStart="0dp"
    Android:background="?android:attr/windowBackground"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:menu="@menu/navigation" />
    </Android.support.constraint.ConstraintLayout>

出力設計:-

enter image description here

1
kvadityaaz