Android Material Design 中的“触摸目标尺寸”到底是什么

2024-04-11

参考有关 Material Design 的 Android 文档,我经常发现我们被引导将按钮的“触摸目标”设置为高度(例如 48dp)(https://www.google.com/design/spec/components/buttons.html#buttons-style https://www.google.com/design/spec/components/buttons.html#buttons-style)。 但它是每个 Button 元素的默认值,还是我必须显式设置它以及如何设置?


如果您对默认材质按钮感到满意,请使用它。对于大多数事情来说都是没问题的。 Button 的材质主题定义为:

<!-- Bordered ink button -->
<style name="Widget.Material.Button">
    <item name="background">@drawable/btn_default_material</item>
    <item name="textAppearance">?attr/textAppearanceButton</item>
    <item name="minHeight">48dip</item>
    <item name="minWidth">88dip</item>
    <item name="stateListAnimator">@anim/button_state_list_anim_material</item>
    <item name="focusable">true</item>
    <item name="clickable">true</item>
    <item name="gravity">center_vertical|center_horizontal</item>
</style>

正如您所看到的,minHeight 属性设置为 48dp,这意味着该按钮的高度至少为 48dp。不好的是按钮的背景有插图,这意味着额外的触摸区域是通过按钮周围有一些透明像素来实现的。它使得按钮很难正确布局,如下面的帖子所示:

如何将 Material 按钮与其他 UI 元素对齐 https://stackoverflow.com/questions/37190998/how-to-align-material-buttons-with-other-ui-elements

这种小部件设计确实限制了布局构建选项。该指南将触摸目标描述为应该影响小部件的外部附加触摸区域。应该这样做:

  • 用半径为 2dp 的圆形矩形覆盖默认背景
  • 将 minHeight 设置为 36dp
  • 使用 setTouchDelegate 更改触摸目标
  • 或覆盖 getHitRect 来更改触摸目标

See:

https://developer.android.com/reference/android/view/TouchDelegate.html https://developer.android.com/reference/android/view/TouchDelegate.html

https://developer.android.com/reference/android/view/View.html#getHitRect(android.graphics.Rect) https://developer.android.com/reference/android/view/View.html#getHitRect(android.graphics.Rect)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Material Design 中的“触摸目标尺寸”到底是什么 的相关文章

随机推荐