Значок плавающей кнопки действия не по центру

Мне не помог ни один из другие ответы на SO.

Вот мой FAB xml:

<com.google.android.material.floatingactionbutton.FloatingActionButton xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    android:id = "@+id/fabTransfer"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:layout_gravity = "bottom|end"
    app:fabCustomSize = "@dimen/fab_size_normal"
    android:layout_margin = "16dp"
    app:srcCompat = "@drawable/ic_add_white_24dp" />

Вот иконка xml:

<vector xmlns:android = "http://schemas.android.com/apk/res/android"
    android:width = "24dp"
    android:height = "24dp"
    android:viewportWidth = "24.0"
    android:viewportHeight = "24.0">
<path
    android:fillColor = "#FFFFFFFF"
    android:pathData = "M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
 </vector>

И все же моя иконка выглядит вот так!

Значок плавающей кнопки действия не по центру

Есть идеи, что происходит? Я пробовал и другие значки (png и векторы), и это все то же самое.

Надеемся, что векторный тег закрыт в вашем реальном файле ресурсов, и он был просто опущен здесь по ошибке.

Nikos Hidalgo 10.04.2019 17:33

@NikosHidalgo Да, по какой-то причине это просто упущено здесь

MSpeed 11.04.2019 08:57

Мне интересно, имеет ли это какое-либо отношение к области просмотра, которая по сути является размером холста для рисования. Попробуйте поэкспериментировать со значениями и посмотрите, есть ли разница, или вообще удалите их и посмотрите, сработает ли это.

Nikos Hidalgo 11.04.2019 09:42

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

MSpeed 11.04.2019 15:47

единственный потенциальный обходной путь, который я могу придумать, - это использовать ресурс изображения как нарисованный вместо векторного, а на вкладке «Дизайн» вашего макета перетащите кнопку действия из меню выбора, которое предоставляет Android Studio, чтобы вы могли увидеть мастер, который поможет вам путем применения drawable на переднем плане вашего fab.

Nikos Hidalgo 11.04.2019 16:46

Привет, скорость, какая версия com.google.android.material:material? Попробуйте использовать 1.0.0

Aamir Khan 12.04.2019 16:03

@AamirKhan Ага 'com.google.android.material:material:1.0.0' :(

MSpeed 12.04.2019 16:24

можно ваш xml файл?

Aamir Khan 12.04.2019 17:10

Вот так, но с <xml ...> в начале. Затем он включен в кучу разных раскладок, и во всех он одинаков. LinearLayout, CoordinatorLayout, Framelayout — то же самое.

MSpeed 13.04.2019 15:25
8
9
3 387
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

попробуйте изменить это свойство android:layout_gravity="bottom|end" на android:layout_gravity="center"

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

Nikos Hidalgo 10.04.2019 17:12

Это потому, что вы написали: android:layout_gravity="bottom|end", поэтому в конце он идет внизу.

Вы должны заменить его на "центр"

Если это не работает, попробуйте просто:

андроид: гравитация = "центр"

Нет, layout_gravity влияет на положение виджета в макете. android: здесь гравитация не имеет значения

MSpeed 11.04.2019 08:57
Ответ принят как подходящий

Решение состояло в том, чтобы добавить стиль в FAB, который расширяет Widget.MaterialComponents.FloatingActionButton

<style name = "MyFabStyle" parent = "Widget.MaterialComponents.FloatingActionButton">
        <item name = "backgroundTint">@color/fab_background</item>
        <item name = "rippleColor">#0d9bed</item>
</style>

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

DMonkey 02.05.2019 11:22

Однако это сработало, попробовав все другие предложенные ответы: fabTransfer.setScaleType(ImageView.ScaleType.CENTER). Я переходил со старой библиотеки поддержки на 28+.

DMonkey 02.05.2019 14:14

После этот ответ вы должны попробовать установить app:fabCustomSize на 24dp и посмотреть, работает ли он лучше.

app:fabCustomSize = "48dp"

Это может произойти из-за того, что стиль макета переопределяет стиль плавающей кнопки. Чтобы решить эту проблему, обязательно восстановите стиль, определенный как ваш собственный, следующим образом:

В стили.xml

    <style name = "AppTheme.NoActionBar" parent = "Theme.MaterialComponents.Light.Bridge">
        <item name = "windowActionBar">false</item>
        <item name = "windowNoTitle">true</item>
        <item name = "colorPrimary">@color/colorPrimaryDark</item>
        <item name = "colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name = "colorAccent">@color/colorPrimaryDark</item>
        <item name = "android:windowDrawsSystemBarBackgrounds">true</item>
        <item name = "android:statusBarColor">@color/black_app</item>
        <item name = "android:textColor">@color/white</item>
        <item name = "floatingActionButtonStyle">@style/FabButtonStyle</item>
    </style>

    <style name = "FabButtonStyle" parent = "Widget.MaterialComponents.FloatingActionButton">
        <item name = "backgroundTint">@color/teal_200</item>
        <item name = "tint">@color/white</item>
    </style>

А затем убедившись, что макет представления соответствует стилю:

В AndroidManifest.xml

<activity
            android:name = ".OnBoardingActivity"
            android:configChanges = "orientation"
            android:screenOrientation = "portrait"
            android:theme = "@style/AppTheme.NoActionBar"
            tools:ignore = "LockedOrientationActivity" />

Другие вопросы по теме