だからあなたのbuild.gradle
ファイルにこれを追加してください:
compile 'com.android.support:design:27.1.1'
AndroidX注: Googleでは、古いサポートライブラリに代わる新しいAndroidX拡張ライブラリを導入しています。AndroidXを使用するには、まずファイルを更新しgradle.properties
、編集build.gradle
しcompileSdkVersion
て28
(またはそれ以上)に設定し、前の行の代わりに次の行を使用してcompile
ください。
implementation 'com.google.android.material:material:1.0.0'
あなたの次の、themes.xml
またはstyles.xml
またはものは何でも、(下記参照)を確認してください、あなたはそれを上書きしない限り、それはあなたのアプリケーションのアクセントcolor--とあなたのFABの色だthis-を設定します:
<item name="colorAccent">@color/floating_action_button_color</item>
レイアウトのXML:
<RelativeLayout
...
xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.design.widget.FloatingActionButton
android:id="@+id/myFAB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_plus_sign"
app:elevation="4dp"
... />
</RelativeLayout>
または、上記のAndroidXマテリアルライブラリを使用している場合は、代わりにこれを使用します。
<RelativeLayout
...
xmlns:app="http://schemas.android.com/apk/res-auto">
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/myFAB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:srcCompat="@drawable/ic_plus_sign"
app:elevation="4dp"
... />
</RelativeLayout>
ドキュメント (ここで重要なドキュメント)(setRippleColor
、など)でより多くのオプションを見ることができますが、注意の1つは次のとおりです。
app:fabSize="mini"
別の興味深いもの-1つのFABのみの背景色を変更するには、以下を追加します。
app:backgroundTint="#FF0000"
(たとえば、それを赤に変更するために)上記のXMLに変更します。
とにかく、コードでは、アクティビティ/フラグメントのビューがインフレートされた後...
FloatingActionButton myFab = (FloatingActionButton) myView.findViewById(R.id.myFAB);
myFab.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
doMyThing();
}
});
観察:
- たとえば「RelativeLayout」を使用して2つのビューを分割する「シーム」にあるこれらのボタンの1つに、たとえば、ボーダーと重なるように負のレイアウトマージンがある場合、問題が発生します。FABのサイズは実際にはロリポップとプリロリポップでは非常に異なります。APIを切り替えると、実際にASのビジュアルレイアウトエディターでこれを確認できます。プリロリポップに切り替えると、突然「吹き出し」ます。余分なサイズの理由は、影がビューのサイズをあらゆる方向に拡大するためです。したがって、FABのマージンが他のものに近い場合は、マージンを調整するときにこれを考慮する必要があります。
多すぎる場合にパディングを削除または変更する方法は次のとおりです。
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams) myFab.getLayoutParams();
p.setMargins(0, 0, 0, 0); // get rid of margins since shadow area is now the margin
myFab.setLayoutParams(p);
}
また、FABの高さを取得して2で除算し、それをマージンオフセットとして使用することで、プログラム的にFABをRelativeLayoutの2つの領域間の「シーム」に配置しました。しかし、myFab.getHeight()はゼロを返しました。ビューがインフレートされた後でも、それは見えました。代わりに、ViewTreeObserverを使用して、レイアウトした後にのみ高さを取得し、位置を設定しました。こちらのヒントを
ご覧ください。それはこのように見えました:
ViewTreeObserver viewTreeObserver = closeButton.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
closeButton.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
closeButton.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
// not sure the above is equivalent, but that's beside the point for this example...
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) closeButton.getLayoutParams();
params.setMargins(0, 0, 16, -closeButton.getHeight() / 2); // (int left, int top, int right, int bottom)
closeButton.setLayoutParams(params);
}
});
}
これが正しい方法かどうかはわかりませんが、うまくいくようです。
- 標高を下げると、ボタンの影のスペースを小さくできるようです。
あなたは「縫い目」にFABをしたい場合は、使用することができますlayout_anchor
し、layout_anchorGravity
ここでの例です:
<android.support.design.widget.FloatingActionButton
android:layout_height="wrap_content"
android:layout_width="wrap_content"
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|right|end"
android:src="@drawable/ic_discuss"
android:layout_margin="@dimen/fab_margin"
android:clickable="true"/>
Snackbarが表示されたときに、ボタンをCoordinatorLayoutでラップすることにより、ボタンを自動的に邪魔にならないようにすることができます。
もっと: