Как добавить плавающую кнопку действия без AppCompat?

Я хочу создать новое приложение, используя только API 21.

Чтобы следовать дизайну материалов, я пытаюсь использовать FAB, но не могу найти достойную информацию о том, как использовать тот, который теперь включен в библиотеку дизайна.

До сих пор я добавил библиотеку в файл build.gradle и добавил FAB в свое представление (код ниже)

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:src="@android:drawable/ic_menu_add"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        app:elevation="5dp"
        app:borderWidth="0dp"
        app:fabSize="mini"/>

(Это в RelativeLayout)

Когда я запускаю приложение, я получаю:

android.view.InflateException: строка двоичного XML-файла № 15: ошибка при раздувании класса android.support.design.widget.FloatingActionButton

Я нашел один ответ на SO, в котором говорится, что мне нужно использовать тему AppCompat, но я бы предпочел просто использовать чистый материал Material/API21.

Как я могу использовать FAB без AppCompat (вспомогательных библиотек)?


comment
Я думаю, что вы действительно упустите множество средств экономии времени и отличные API, такие как CoordinatorLayout, Snackbar, NavigationView, TabLayout... и так далее. Что в значительной степени является чисто материальным материалом. В любом случае, создать свой собственный FloatingActionButton на API21+ довольно просто. Вы можете ознакомиться с реализацией Google в android-topeka.   -  person Markus Rubey    schedule 23.06.2015


Ответы (5)


FAB встроен в новую библиотеку Design Compat, которая будет работать на устройствах уже с API 7. Вам нужно будет включить ее в качестве зависимости, чтобы использовать ее (и не стесняйтесь делать это).

Если вы хотите избежать использования библиотеки (или любого внешнего кода), вам нужно будет нарисовать FAB самостоятельно (используя Shape Drawable).

В итоге использование библиотеки Design Compat является предпочтительным методом поддержки FAB, и вы должны использовать его. Библиотека Design Compat IS — это «чистый материал API21».

Не существует реализации FAB, реализованной для любого API, кроме той, что находится в библиотеке поддержки дизайна. Вы должны включить библиотеку или полностью реализовать код самостоятельно.

Библиотека дизайна зависит от AppCompat, поэтому, если вы планируете использовать нативную сборку, вам также необходимо включить зависимость для AppCompat.

Из официального сообщения в блоге: "Обратите внимание, что поскольку библиотека дизайна зависит от библиотек поддержки Support v4 и AppCompat, они будут включены автоматически при добавлении зависимости от библиотеки дизайна."

person Booger    schedule 23.06.2015
comment
Я думаю, что есть какие-то перекрещенные провода. Я знаю, что мне нужно использовать библиотеку поддержки дизайна, я не об этом. Я говорю, что похоже, что я должен использовать материал AppCompat v7, чего я не хочу. - person Mr Pablo; 23.06.2015
comment
Объединил это в ответ - суть в том, что есть зависимость от AppCompat, поэтому вы должны ее использовать. - person Booger; 23.06.2015

Библиотека Material Design имеет зависимость от AppCompat. Проверьте ответ @Booger. Об этом сообщает официальный блог.

Как использовать FAB.

Добавьте зависимость к вашему build.gradle:

compile 'com.android.support:design:22.2.0'

Просто добавьте FAB в свой дизайн:

<android.support.design.widget.FloatingActionButton
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|right"
            android:src="@drawable/ic_add"
            android:layout_marginBottom="@dimen/fab_margin_bottom"
            android:layout_marginRight="@dimen/fab_margin_right"
            app:elevation="6dp"
            app:borderWidth="0dp"
            app:fabSize="normal" />

В настоящее время есть некоторые ошибки.

Вы должны определить app:borderWidth="0dp" для отображения тени с помощью API21+.

Также вам необходимо определить разные поля для устройств API 21+ и старше.

res/values/dimens.xml

<dimen name="fab_margin_right">0dp</dimen>
<dimen name="fab_margin_bottom">0dp</dimen>

res/values-v21/dimens.xml

<dimen name="fab_margin_right">16dp</dimen>
<dimen name="fab_margin_bottom">16dp</dimen>

FAB использует цвет акцента, и вы можете переопределить его с помощью атрибута app:backgroundTint.

Наконец, вы можете установить ClickListener с помощью:

fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //do something
    }
});
person Gabriele Mariotti    schedule 23.06.2015

На GitHub также есть несколько популярных библиотек, таких как:

FloatingActionButton, который может разворачиваться/сворачиваться в виде меню для отображения нескольких действий.

person dasar    schedule 23.06.2015
comment
Я лично не стал бы использовать стороннюю библиотеку прямо сейчас — и придерживался бы нативной реализации, включенной в библиотеку дизайна. Важно придерживаться стандартов (и стандартная библиотека Design Lib Implemented FAB поможет вам в этом). Я знаю, что у него может быть не так много функций (включая расширяемость), но все же я считаю важным разрабатывать и внедрять новые стандарты. - person Booger; 23.06.2015

Я бы сказал, что, хотя вы намереваетесь сделать свое приложение доступным только на API21, я все равно рекомендую вам реализовать свое приложение с помощью библиотеки поддержки Android AppCompat-v7. Вы получите много преимуществ.

В любом случае это ваш выбор. Просто мое предложение. Но если вы убеждены. Или ознакомьтесь с этим полным руководством о том, как использовать библиотеку поддержки дизайна Android. http://inthecheesefactory.com/blog/android-design-support-library-codelab/en

Надеюсь, это поможет

person nuuneoi    schedule 23.06.2015
comment
Каковы преимущества использования библиотеки v7? Кроме того, кажется, что я могу использовать только собственный FAB с помощью библиотеки поддержки дизайна, которая ДОЛЖНА использовать тему AppCompat:/ - person Mr Pablo; 23.06.2015

На самом деле у меня была такая же проблема. Решение было довольно простым: вам нужно определить app:rippleColor="@color/colorPrimary", и вы можете использовать FAB без использования тем Appcompat и действий. Конечно, вы должны включить compile 'com.android.support:support-v4:25.3.1' и compile 'com.android.support:design:25.3.1', но вам НЕ ОБЯЗАТЕЛЬНО использовать AppCompatActivity и эти темы.

   <android.support.design.widget.FloatingActionButton
    android:id="@+id/action_add_palette"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="16dp"
    android:src="@android:drawable/ic_input_add"
    app:rippleColor="@color/colorPrimary" />
person Jaqen hGhar    schedule 10.09.2017