web-dev-qa-db-ja.com

BottomNavigationViewを使用したFloatingActionButton

FABを配置できません。右下にあるはずですが、BottonNavigationViewの上にあります。

1)coordinateLayout内のRelativeLayoutなしでこれを達成できますか?

2)方法を教えてください

3)フラグメントのコンテナとしてFrameLayoutを使用する必要がありますか?

<Android.support.design.widget.CoordinatorLayout 
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/main_content"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true">

<Android.support.design.widget.AppBarLayout
    Android:id="@+id/appbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:paddingTop="@dimen/appbar_padding_top"
    Android:theme="@style/AppTheme.AppBarOverlay">

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways"
        app:popupTheme="@style/AppTheme.PopupOverlay">

    </Android.support.v7.widget.Toolbar>

</Android.support.design.widget.AppBarLayout>

<FrameLayout
    Android:id="@+id/fragment_container"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

</FrameLayout>

<Android.support.design.widget.FloatingActionButton
    Android:id="@+id/fab_electricity"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="end|bottom"
    Android:layout_margin="@dimen/fab_margin"
    app:layout_anchorGravity="bottom|right|end"
    app:srcCompat="@drawable/ic_add_electro" />

<Android.support.design.widget.BottomNavigationView
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_alignParentBottom="true"
    Android:layout_gravity="bottom">

</Android.support.design.widget.BottomNavigationView>

</Android.support.design.widget.CoordinatorLayout>

result

10
Xmstr

FloatingActionButton.Behaviorをすばやく検索すると、次のことがわかります。

@Override
public void onAttachedToLayoutParams(@NonNull CoordinatorLayout.LayoutParams lp) {
    if (lp.dodgeInsetEdges == Gravity.NO_GRAVITY) {
        // If the developer hasn't set dodgeInsetEdges, lets set it to BOTTOM so that
        // we dodge any Snackbars
        lp.dodgeInsetEdges = Gravity.BOTTOM;
    }
}

BottomNavigationViewもレイアウトの下部にあるため。次の要素をBottomNavigationViewに追加するとCoordinatorLayoutが挿入と覆い焼きを自動的に処理します。

app:layout_insetEdge="bottom"
34
  1. 線形レイアウトで貼り付けて、下部のナビゲーションをコーディネータービューの外側に移動すると、画面上でその下に移動します。

  2. この方法でそれを行うこともできますが、ホスティングアクティビティに配置した空のフラグメントコンテナを使用して、その中にフラグメントをコードで配置することをお勧めします。

    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/appbar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:paddingTop="@dimen/appbar_padding_top"
        Android:theme="@style/AppTheme.AppBarOverlay">
    
        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
           app:popupTheme="@style/AppTheme.PopupOverlay">
    
        </Android.support.v7.widget.Toolbar>
    
    </Android.support.design.widget.AppBarLayout>
    
    <FrameLayout
        Android:id="@+id/fragment_container"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
    
    
    </FrameLayout>
    
    <Android.support.design.widget.FloatingActionButton
        Android:id="@+id/fab_electricity"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="bottom|right"
        app:srcCompat="@drawable/ic_add_electro"/>
    
    
    
    </Android.support.design.widget.CoordinatorLayout>
    <Android.support.design.widget.BottomNavigationView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_gravity="bottom">
    
    </Android.support.design.widget.BottomNavigationView>
    </LinearLayout>
    
1
parkgrrr