【问题标题】:Floating action button icon is not aligned centre when changed using selector使用选择器更改时,浮动操作按钮图标未居中对齐
【发布时间】:2021-06-04 18:31:28
【问题描述】:

当用户触摸图标时,我使用 android 选择器切换浮动操作按钮中的图标。通常,图标在浮动操作按钮中居中对齐,但在用户触摸图标后,切换的图像未正确对齐。请帮帮我。

这是我的代码。

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/btn_drive_mode"
    style="@style/Widget.MaterialComponents.FloatingActionButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:fabSize="mini"
    android:layout_margin="@dimen/dp_16"
    android:contentDescription="map_center_icon"
    app:srcCompat="@drawable/toggle_drive_mode_selector"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintBottom_toTopOf="@id/footer"
    app:backgroundTint="@color/green"
    app:tint="@color/white"/>

我的选择器文件

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_location" android:state_activated="true" />
    <item android:drawable="@android:drawable/ic_dialog_map" />
</selector>

但是图片看起来是这样的,

点击前

点击后

【问题讨论】:

  • 请注意,用它的超类ImageButton 尝试这个不会导致问题,所以它肯定是FloatingActionButton 中的干扰。很好奇!

标签: android floating-action-button


【解决方案1】:

深入了解FloatingActionButton 源代码后,您可以看到超类的比例类型设置为ScaleType.MATRIX,并且在调用setImageDrawable(Drawable) 期间设置了图像的矩阵,正如您所期望的那样。

但是他们似乎没有在drawableStateChanged 期间更新矩阵,我认为这是一个微妙的错误,而不是预期的行为。

因此,要解决此问题,您可以执行以下两项操作之一:


强制FloatingActionButton 使用不同的比例类型

他们在初始化的最后一行以编程方式设置缩放类型,因此必须使用子类重置它,在布局后发布或在每次翻转激活状态时设置。

使用相同大小的图标

您遇到此错误而其他人可能没有遇到此错误的原因是您使用来自不同来源的图标进行切换。如果你 从Material Icons 集合中获取两个图标,则缩放不会导致问题,因为图标需要相同的矩阵。


我个人推荐第二种方法,无论如何使用您自己的图标而不是平台图标很可能是最佳做法,并且在不了解其存在原因的情况下更改 FloatingActionButton 的行为可能会导致意想不到的后果。

【讨论】:

  • 当用户单击修复了我的问题的按钮时,我已将 scaleType 设置为以编程方式居中。
猜你喜欢
  • 2016-03-02
  • 2022-01-01
  • 2021-09-20
  • 2020-08-31
  • 2017-05-19
  • 2019-03-09
  • 2015-08-26
  • 2015-08-07
  • 2021-05-29
相关资源
最近更新 更多