FloatingActionButton Занимает лишние пробелы в предварительном леденце

Я добавил FloatingActionButton для леденца и выше, это нормально, но для леденца ниже он занимает дополнительные пробелы вокруг него.

XML-код:

<android.support.design.widget.FloatingActionButton
        android:id="@+id/bt_ok"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="10dp"
        android:gravity="center"
        android:src="@drawable/ic_done"
        app:backgroundTint="@color/primary"
        app:borderWidth="0dp"
        app:fabSize="mini" />

скриншот леденца n выше: введите здесь описание изображения

FloatingActionButton здесь занимает нужное количество места, но посмотрите на второй экран

снимок экрана с предварительным леденцом: введите здесь описание изображенияТеперь посмотрите, какие лишние поля или лишние пробелы взято FloatingActionButton. Как решить эту проблему.


person Vishwajit Palankar    schedule 21.07.2015    source источник
comment
Я считаю, что вам нужно использовать разные файлы dimens.xml для версий lolipop и более ранних версий, потому что такие вещи, как высота (в вашем случае fabSize и borderWidth), не распознаются правильно в версиях до lolipop.   -  person slorangex    schedule 21.07.2015
comment
да @slorangex я считаю, что вы правы, потому что, когда я изменил высоту, и пространство также имеет тенденцию меняться соответственно. Я думаю, что разные файлы dimen.xml для обоих леденцов и леденцов на палочке, содержащие разную высоту, могут помочь.   -  person Vishwajit Palankar    schedule 21.07.2015


Ответы (5)


Поместите FloatingActionButton в CoordinatorLayout, и все поля будут одинаковыми на всех платформах. В этом случае положение кнопки регулируется FloatingActionButton.Behavior.

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/bt_ok"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginRight="10dp"
        app:backgroundTint="@color/primary"
        app:borderWidth="0dp"
        app:fabSize="mini"/>
</android.support.design.widget.CoordinatorLayout>

Для этого требуется библиотека поддержки Android версии 22.2.1, согласно комментариям к проблеме с Android. 175330

person ls.illarionov    schedule 30.10.2015

Это известная проблема, и она связана с дополнительным запасом. Вы можете сделать это, как показано ниже,

    //to fix margin issue/bug with pre lollipop version
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) floatingActionButton.getLayoutParams();
        params.setMargins(0, 0, 0, 0); // get rid of margins since shadow area is now the margin
        floatingActionButton.setLayoutParams(params);
    }
person srinivasan    schedule 27.07.2015

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fabBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:src="@drawable/ic_plus"
        app:fabSize="normal" />

Ничего особенного, просто баг.

введите здесь описание изображения

введите здесь описание изображения

person Abhishek    schedule 21.07.2015
comment
только что узнал, что это связано с высотой по умолчанию, которая занимает дополнительные пробелы для предварительного леденца, поэтому высота 0 удалит пробел. - person Vishwajit Palankar; 21.07.2015
comment
да, но тень занимает здесь дополнительное место - person Vishwajit Palankar; 21.07.2015

Я использовал отрицательное поле, чтобы уменьшить размер FAB на устройствах до леденцов, но также сохранил область тени вокруг кнопки, чтобы не испортить вид.

int dimen5dp = getResources().getDimensionPixelSize(R.dimen.dimen_5_dp);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) floatingActionButton.getLayoutParams();
    params.setMargins(
            params.leftMargin,
            params.topMargin - ((int) (dimen5dp * 3.1)),      //Approximate factor to shrink the extra 
            params.rightMargin - ((int) (dimen5dp * 3.1)),    //spacing by the shadow  to the actual 
            params.bottomMargin - ((int) (dimen5dp * 3.1)));  //size of the FAB without a shadow
    floatingActionButton.setLayoutParams(params);
}

Также я обернул FAB внутри LineaLayout с app:useCompatPadding="false" как таковой:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:ignore="RtlHardcoded">

    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginRight="10dp"
        app:backgroundTint="@color/white"
        app:srcCompat="@drawable/ic_expand"
        app:useCompatPadding="false"
        tools:ignore="RtlHardcoded"/>
</LinearLayout>

Ниже приведены изображения результата: слева — это устройство для приготовления леденцов на палочке, а справа — устройство с леденцами и выше. Я использовал uiautomatorviewer и включил границы макета на устройстве. Красная пунктирная линия — это границы кнопки FAB, а фиолетовая линия с синими углами — границы LinearLayout. В случае устройства с леденцами тень FAB не занимает лишнего места, поэтому ее границы находятся точно вокруг кнопки без дополнительных полей. В то время как устройство pre-lollipop, тень занимает дополнительное пространство, поэтому границы FAB будут иметь поля вокруг кнопки, но с установленными отрицательными полями LinearLayout сжимается до границ кнопки без дополнительного пространства, добавляемого тенью.

введите здесь описание изображения введите здесь описание изображения

person ahasbini    schedule 06.03.2017

Добавление

app:pressedTranslationZ="0dp"

в ваш FloatingActionButton xml должен работать без изменения высоты.

person ayoub bouroumine    schedule 19.03.2019