参考有关 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(使用前将#替换为@)