Ответ 1
Итак, в вашем файле 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'
Затем, в вашем styles.xml
themes.xml
styles.xml
и т.д. Убедитесь, что вы установили this- в качестве акцента для своего приложения color-- и цвет вашего FAB, если вы не переопределяете его (см. Ниже):
<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>
Вы можете увидеть больше параметров в документации (setRippleColor
и т.д.), Но один из примечаний:
app:fabSize="mini"
Еще один интересный one-- для изменения цвета фона только одного FAB, добавьте:
app:backgroundTint="#FF0000"
(например, чтобы изменить его на красный) на XML выше.
Во всяком случае, в коде, после того, как представление Activity/Fragment надувается....
FloatingActionButton myFab = (FloatingActionButton) myView.findViewById(R.id.myFAB);
myFab.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
doMyThing();
}
});
Замечания:
- Если у вас есть одна из тех кнопок, которые в "шве" разделяют два вида (например, с помощью RelativeLayout) с, скажем, отрицательным нижним полем макета для перекрытия границы, вы заметите проблему: размер FAB на самом деле очень отличается на леденец против pre-lollipop. Это можно увидеть в редакторе визуального макета AS, когда вы переключаетесь между APIs--, и он внезапно "выдыхается", когда вы переключаетесь в режим pre-lollipop. Кажется, причиной дополнительного размера является то, что тень расширяет размер вида в каждом направлении. Таким образом, вы должны учитывать это при настройке полей 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 в "шов" между двумя областями в RelativeLayout, взяв высоту FAB, разделив ее на два, и используя ее в качестве смещения поля. Но 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 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.
Больше:
- Страница библиотеки поддержки Google Design
- документы FloatingActionButton
- "Материал сейчас" - разговор из Google I/O 2015 - библиотека поддержки дизайна представлена в 17 часов 22 минуты
- Образец библиотеки поддержки проектирования/витрина