Мне не помог ни один из другие ответы на 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 и векторы), и это все то же самое.
@NikosHidalgo Да, по какой-то причине это просто упущено здесь
Мне интересно, имеет ли это какое-либо отношение к области просмотра, которая по сути является размером холста для рисования. Попробуйте поэкспериментировать со значениями и посмотрите, есть ли разница, или вообще удалите их и посмотрите, сработает ли это.
@NikosHidalgo Я пытался возиться со значениями, но они всегда кажутся смещенными по центру, почти как будто его левый верхний угол закреплен не в том месте.
единственный потенциальный обходной путь, который я могу придумать, - это использовать ресурс изображения как нарисованный вместо векторного, а на вкладке «Дизайн» вашего макета перетащите кнопку действия из меню выбора, которое предоставляет Android Studio, чтобы вы могли увидеть мастер, который поможет вам путем применения drawable на переднем плане вашего fab.
Привет, скорость, какая версия com.google.android.material:material? Попробуйте использовать 1.0.0
@AamirKhan Ага 'com.google.android.material:material:1.0.0'
:(
можно ваш xml файл?
Вот так, но с <xml ...>
в начале. Затем он включен в кучу разных раскладок, и во всех он одинаков. LinearLayout, CoordinatorLayout, Framelayout — то же самое.
попробуйте изменить это свойство android:layout_gravity="bottom|end" на android:layout_gravity="center"
это не должно влиять на возможность рисования, но положение всей кнопки в ее родительском макете
Это потому, что вы написали: android:layout_gravity="bottom|end", поэтому в конце он идет внизу.
Вы должны заменить его на "центр"
Если это не работает, попробуйте просто:
андроид: гравитация = "центр"
Нет, layout_gravity влияет на положение виджета в макете. android: здесь гравитация не имеет значения
Решение состояло в том, чтобы добавить стиль в FAB, который расширяет Widget.MaterialComponents.FloatingActionButton
<style name = "MyFabStyle" parent = "Widget.MaterialComponents.FloatingActionButton">
<item name = "backgroundTint">@color/fab_background</item>
<item name = "rippleColor">#0d9bed</item>
</style>
Это не сработало для меня, и я не вижу, как этот пользовательский стиль влияет на выравнивание значка по центру.
Однако это сработало, попробовав все другие предложенные ответы: fabTransfer.setScaleType(ImageView.ScaleType.CENTER). Я переходил со старой библиотеки поддержки на 28+.
После этот ответ вы должны попробовать установить 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" />
Надеемся, что векторный тег закрыт в вашем реальном файле ресурсов, и он был просто опущен здесь по ошибке.