Android “究竟是什么?”;触摸目标尺寸“;在安卓材料设计中

Android “究竟是什么?”;触摸目标尺寸“;在安卓材料设计中,android,button,layout,material-design,Android,Button,Layout,Material Design,参考安卓关于材料设计的文档,我经常发现我们被引导将按钮的“触摸目标”设置为,比如说,高度为48dp()。 但是它是每个按钮元素的默认值,还是我必须明确地设置它以及如何设置?材质设计是一个设计规范,因此,谈论的很多是“什么”,而不是“如何”。触摸目标大小是基于多年来发现的一个小部件的最小尺寸,普通人的手指很容易与之互动。如果您坚持使用Google定义的主题和样式(例如AppCompat主题),您应该不会有问题。如果您使用的是完全自定义的主题(我个人建议您不要这样做),那么您就必须使用minWidt

参考安卓关于材料设计的文档,我经常发现我们被引导将按钮的“触摸目标”设置为,比如说,高度为48dp()。
但是它是每个按钮元素的默认值,还是我必须明确地设置它以及如何设置?

材质设计是一个设计规范,因此,谈论的很多是“什么”,而不是“如何”。触摸目标大小是基于多年来发现的一个小部件的最小尺寸,普通人的手指很容易与之互动。如果您坚持使用Google定义的主题和样式(例如AppCompat主题),您应该不会有问题。如果您使用的是完全自定义的主题(我个人建议您不要这样做),那么您就必须使用minWidth和/或minHeight为48dp设置小部件的样式。

如果您可以使用默认的材质按钮,就使用它。大多数事情都可以。按钮的材质主题定义为:

<!-- 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>

@可拉伸/btn\u默认\u材料
?属性/文本外观按钮
48dip
88度
@动画/按钮\状态\列表\动画\材质
真的
真的
中心|垂直|中心|水平
如您所见,minHeight属性设置为48dp,这意味着此按钮的高度至少为48dp。它的缺点是按钮的背景有插图,这意味着额外的触摸区域是通过在按钮周围有一些透明像素来实现的。这使得按钮很难正确布局,如下所示:

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

  • 使用半径为2dp的圆形矩形覆盖默认背景
  • 将最小高度设置为36dp
  • 使用setTouchDelegate更改触摸目标
  • 或覆盖getHitRect以更改触摸目标
见:


谢谢您的详细解释。那么,您的意思是将minHeight设置为48dip将达到“触摸目标大小”的要求,或者它是由导入样式“Widget.Material.Button”制作的?我问这个问题是因为我很好奇,没有一个定制按钮类似于具有所谓“触摸目标大小”的材质按钮的指南。将minHeight设置为48dp将同时将触摸矩形和绘图矩形设置为48dp,这就是“Widget.material.button”所做的。他们使用形状插入将绘图矩形从该尺寸切割下来。我宁愿将minHeight设置为36dp,并使用我提到的两种方法之一扩展touch rect。我在哪里可以找到可绘制的“@drawable/btn_default_material”?我想是在谷歌的存储库中的某个地方:)