コーディネーターレイアウトの右下にフローティングアクションボタンが固定されています。ビューの余白から16dpです(余白はデフォルトで含まれ、dimens.xml
ファイルで指定されています)が、その影はクリッピングされており、正方形の外観になっています(以下を参照)。フローティングアクションボタンをビューの余白から32dpに移動すると、その影が正しく表示されます。
標高属性(Android:elevation="5dp"
)を設定しようとしましたが、効果がないようです。また、属性borderWidthを0(app:borderWidth="0dp"
)に設定しようとしましたが、効果がありませんでした。
フローティングアクションボタンがこのように動作する理由はありますか?
[〜#〜] xml [〜#〜]
<Android.support.design.widget.CoordinatorLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/coordinator_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/create_floating_action_button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/ic_create_white_48dp"
app:layout_anchor="@id/coordinator_layout"
app:layout_anchorGravity="bottom|right" />
</Android.support.design.widget.CoordinatorLayout>
画像
問題は親が影を切り取っているです。シャドウをクリッピングしている親(必ずしも階層内の次の親である必要はありません)を探し、これをxmlのビューに追加します。
Android:clipChildren="false"
私は今これをテストしていて、ビューをクリッピングしていて正常に機能している親にその行を削除して追加しています。
別のコンテナを追加したり、マージンを変更したりすることは、私がお勧めしない回避策です。パッチが多すぎます。ミニファブのコンテナサイズは異なり、APIレベル(<21または> = 21)に応じて異なるサイズが必要です。
同様の問題がありました。 2つのことをする:
Android.support.design.widget.CoordinatorLayout
削除する Android:paddingRight="@dimen/activity_horizontal_margin"
およびAndroid:paddingBottom="@dimen/activity_vertical_margin"
Android.support.design.widget.FloatingActionButton
追加 Android:layout_marginRight="@dimen/activity_horizontal_margin"
およびAndroid:layout_marginBottom="@dimen/activity_horizontal_margin"
説明= FABには影を表示する場所がなかったため、完全には表示されていません。
私も同じ問題を抱えていました。しかし、FAB
のためにマージン値を捨てることはできませんでした。そこで、階層に別のレイヤーを追加しました。これにより、親を混乱させることなく、FAB
を目的の場所に正確に配置することができました。これで、CoordinatorLayout
のためにCoordinatorLayout
内にFAB
ができました。以下は私の変更したレイアウトファイルです。
<Android.support.design.widget.CoordinatorLayout
Android:id="@+id/ddd"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:background="@drawable/tile"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Android.support.design.widget.CoordinatorLayout
Android:id="@+id/fff"
Android:padding="10dp"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<ScrollView
Android:id="@+id/scroll_container"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<!-- All my views under a LinearLayout parent -->
</ScrollView>
</Android.support.design.widget.CoordinatorLayout>
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/fabAdd"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:contentDescription="Add Text"
Android:visibility="visible"
Android:layout_margin="10dp"
app:backgroundTint="@color/primary"
app:layout_anchor="@+id/fff"
app:layout_anchorGravity="bottom|right|end"/>
</Android.support.design.widget.CoordinatorLayout>
これをparentビューに追加しました:
Android:clipToPadding="false"