Android L - плавающая кнопка действия (FAB)
Разве Google уже выпустил определенный стиль или компонент для этой новой круглой кнопки FAB или я должен реализовать проект самостоятельно?
Кнопка описывается здесь: Google Design | Плавающие кнопки действий
РЕДАКТИРОВАТЬ (05/2015): Проверить ответ Лукаса/Ответ Габриэле, показывающий простой способ реализовать его с помощью библиотеки поддержки дизайна.
Ответы
Ответ 1
UPDATE: теперь есть официальный виджет для FAB: FloatingActionButton, см. Габриэле Мариотти для получения полной информации.
По словам Адама Пауэлла и Чет Хаазе, они не создали виджет для кнопки FAB, потому что это очень простой компонент для воспроизведения.
В речи Google IO 2014 возник вопрос: "Google I/O 2014 -" Материаловедение: разработка приложений для Android с материальным дизайном ", в конце выступления (примерно в 37:50) был именно этот вопрос, вы можете услышать это здесь:
https://www.youtube.com/watch?v=lSH9aKXjgt8#t=2280
Chet Haase говорит, что RoundedBitmapDrawable (я не проверял, что это имя), который должен уже выполнять задачу определения Outline.
Но вы можете сделать это с помощью собственного рисования, установить для него возвышенность и программно определить круг Outline.
Это должно дать вам круглую кнопку с теневым выпуском L.
Но я думаю, что вам нужно будет создать Shadow pre-L самостоятельно.
Я должен проверить код для CardView, чтобы увидеть, как он воспроизводит тени pre-L. Я, наверное, сделаю это, но у меня нет времени. Если никто не появится с подробностями, я сделаю это после того, как найду время, чтобы проверить его.
EDIT:
Габриэле Мариотти (см. его ответ ниже, спасибо) добавил код, чтобы показать вам, как это сделать.
Благодаря комментариям @shomeser он написал библиотеку, чтобы сделать кнопку fab:
https://github.com/shamanland/floating-action-button
Чтобы использовать его:
dependencies {
compile 'com.shamanland:fab:0.0.3'
}
Вы также можете прочитать его ответ на другой вопрос: Как добавить новую "плавучую кнопку действия" ? между двумя виджетами/макетами
Ответ 2
ОБНОВЛЕНО: 16/08/2019 официальными компонентами Материал для библиотеки Android
С новыми Материальными компонентами для Android добавьте в свой build.gradle
:
implementation 'com.google.android.material:material:1.0.0'
Затем добавьте в свой макет:
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/floating_action_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_margin="16dp"
app:srcCompat="@drawable/ic_plus_24"/>
И используйте это:
FloatingActionButton floatingActionButton =
(FloatingActionButton) findViewById(R.id.floating_action_button);
floatingActionButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// Handle the click.
}
});
Если вы используете тему материала, например Theme.MaterialComponents
, ваш FAB унаследует стиль материала. В противном случае просто примените стиль @style/Widget.MaterialComponents.FloatingActionButton
<com.google.android.material.floatingactionbutton.FloatingActionButton
....
style="@style/Widget.MaterialComponents.FloatingActionButton"
..../>
Дополнительная информация здесь.
ОБНОВЛЕНО: 30/05/2015 с официальной библиотекой поддержки проектирования
Там официальный виджет сейчас.
Просто добавьте эту зависимость в свой build.gradle
compile 'com.android.support:design:22.2.0'
Добавьте этот вид в свой макет:
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:src="@drawable/ic_done" />
И используйте это:
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//TODO
}
});
Документация:
ОБНОВЛЕНО: 12/12/2014 с кодом Android 5
Также вы можете добавить и stateListAnimator к своей кнопке:
<Button
android:stateListAnimator="@anim/anim"
/>
Где anim.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_enabled="true"
android:state_pressed="true">
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="translationZ"
android:valueFrom="@dimen/button_elevation"
android:valueTo="@dimen/button_press_elevation"
android:valueType="floatType" />
</item>
<item>
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="translationZ"
android:valueFrom="@dimen/button_press_elevation"
android:valueTo="@dimen/button_elevation"
android:valueType="floatType" />
</item>
</selector>
Dimens.xml - это
<resources>
<dimen name="fab_size">56dp</dimen>
<dimen name="button_elevation">2dp</dimen>
<dimen name="button_press_elevation">4dp</dimen>
</resources>
Проверьте ответ даниэле.
О набросках упоминается Даниэле.
Добавьте атрибут высоты к своей кнопке и установите схему с помощью кода:
<ImageButton
android:background="@drawable/ripple"
android:stateListAnimator="@anim/anim"
android:src="@drawable/ic_action_add"
android:elevation="4dp"
/>
О набросках:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layoutfab);
//Outline: OLD METHOD IN L-PREVIEW
//int size = getResources().getDimensionPixelSize(R.dimen.fab_size);
//Outline outline = new Outline();
//outline.setOval(0, 0, size, size);
//findViewById(R.id.fab).setOutline(outline);
Button fab = (Button) findViewById(R.id.fab);
ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
// Or read size directly from the view width/height
int size = getResources().getDimensionPixelSize(R.dimen.fab_size);
outline.setOval(0, 0, size, size);
}
};
fab.setOutlineProvider(viewOutlineProvider);
}
}
![enter image description here]()
Ответ 3
Google теперь предоставляет официальную библиотеку, называемую библиотекой дизайна, , содержащую кнопку Fab. Просто добавьте следующую зависимость Gradle:
compile 'com.android.support:design:22.2.0'
Затем вы можете использовать кнопку fab следующим образом:
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
Более подробную информацию можно найти в своем объявлении
http://android-developers.blogspot.ch/2015/05/android-design-support-library.html
или на странице javadoc
http://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
Ответ 4
Так как функция ярлыков FAB (например, в приложениях Evernote или Inbox) была добавлена в эту удивительную библиотеку, не стесняйтесь ее использовать:
Gradle зависимость:
compile 'com.getbase:floatingactionbutton:1.3.0'
layout.xml:
<com.getbase.floatingactionbutton.FloatingActionsMenu
android:id="@+id/multiple_actions"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
fab:fab_addButtonColorNormal="@color/white"
fab:fab_addButtonColorPressed="@color/white_pressed"
fab:fab_addButtonPlusIconColor="@color/half_black"
fab:fab_labelStyle="@style/menu_labels_style"
android:layout_marginBottom="16dp"
android:layout_marginRight="16dp"
android:layout_marginEnd="16dp">
<com.getbase.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
fab:fab_colorNormal="@color/white"
fab:fab_title="Action A"
fab:fab_colorPressed="@color/white_pressed"/>
<com.getbase.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
fab:fab_colorNormal="@color/white"
fab:fab_title="Action B"
fab:fab_colorPressed="@color/white_pressed"/>
</com.getbase.floatingactionbutton.FloatingActionsMenu>
menu_labels_style.xml:
<style name="menu_labels_style">
<item name="android:background">@drawable/fab_label_background</item>
<item name="android:textColor">@color/white</item>
</style>
fab_label_background.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/black_semi_transparent"/>
<padding
android:left="16dp"
android:top="4dp"
android:right="16dp"
android:bottom="4dp"/>
<corners
android:radius="2dp"/>
</shape>
Наслаждайтесь!