FAB на устройствах до Lollipop с новой библиотекой поддержки

В документе библиотеки поддержки указано, что версия 22.2 поддерживает FloatingActionButton в Pre-Lollipop. устройства.

Я реализовал демонстрационное приложение, чтобы показать FAB на KitKat. FAB отображается, но я все еще не могу установить высоту ни в xml, ни в коде. В xml я получаю предупреждение, и мне нужно использовать tools:ignore="NewApi". Если я вызываю setElevation программно, я получаю исключение, потому что метод не существует.

Я добавил это в свой макет

<android.support.design.widget.FloatingActionButton
    android:id="@+id/add_button"
    style="@style/FAB"
    android:src="@drawable/ic_add_white_24dp"
    android:contentDescription="@string/add_ringtone" />

где стиль определяется следующим образом:

<resources
    xmlns:tools="http://schemas.android.com/tools">
    <style name="FAB" tools:ignore="NewApi">
       <item name="android:layout_width">@dimen/fab_width</item>
       <item name="android:layout_height">@dimen/fab_height</item>
       <item name="android:background">@drawable/fab_background</item>
       <item name="android:layout_alignParentBottom">true</item>
       <item name="android:layout_alignParentRight">true</item>
       <item name="android:layout_marginBottom">@dimen/fab_margin</item>
       <item name="android:layout_marginRight">@dimen/fab_margin</item>
       <item name="android:elevation" >@dimen/fab_elevation</item>
       <item name="android:stateListAnimator">@anim/rise</item>

    </style>

</resources>

Что мне нужно сделать, чтобы установить высоту на KitKat с новой библиотекой поддержки?


person kingston    schedule 31.05.2015    source источник


Ответы (2)


Поскольку новый FAB теперь является частью библиотеки поддержки, вам, вероятно, потребуется заменить

<item name="android:elevation">@dimen/fab_elevation</item>

by

<item name="app:elevation">@dimen/fab_elevation</item>

в вашем стиле.

person stkent    schedule 31.05.2015
comment
См.: stackoverflow.com/questions/30532863/. - person Jared Burrows; 02.06.2015

Это решение:

В файле градиента:

dependencies {
    compile 'com.android.support:support-v4:22.2.0'
    compile 'com.android.support:design:22.2.0'
}

В файле макета:

<android.support.design.widget.FloatingActionButton
    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:id="@+id/add_button"
    style="@style/FAB"
    app:elevation="@dimen/fab_elevation"
    android:src="@drawable/ic_add_white_24dp"
    android:contentDescription="@string/add_ringtone" />

В папке styles.xml в папке значений:

<style name="FAB">
    <item name="android:layout_width">@dimen/fab_size</item>
    <item name="android:layout_height">@dimen/fab_size</item>
    <item name="android:background">@drawable/fab_background</item>
    <item name="android:layout_alignParentBottom">true</item>
    <item name="android:layout_alignParentRight">true</item>
    <item name="android:layout_marginBottom">@dimen/fab_edge_distance</item>
    <item name="android:layout_marginRight">@dimen/fab_edge_distance</item>

В файле styles.xml в папке values-21:

<resources
    xmlns:tools="http://schemas.android.com/tools">
    <style name="FAB" tools:ignore="NewApi">
       <item name="android:layout_width">@dimen/fab_width</item>
       <item name="android:layout_height">@dimen/fab_height</item>
       <item name="android:background">@drawable/fab_background</item>
       <item name="android:layout_alignParentBottom">true</item>
       <item name="android:layout_alignParentRight">true</item>
       <item name="android:layout_marginBottom">@dimen/fab_margin</item>
       <item name="android:layout_marginRight">@dimen/fab_margin</item>
       <item name="android:stateListAnimator">@anim/rise</item>

    </style>

</resources>
person kingston    schedule 01.06.2015
comment
обратите внимание, что мне еще не удалось установить android:stateListAnimator - person kingston; 01.06.2015