考虑以下布局(从这里拉出):
我希望您能够解释如何使此布局随屏幕大小缩放,对于正方形来说,自定义的onMeasure函数非常有效:
以下自定义Togglebuttons和Imagebuttons的宽度和高度应自动缩放以填充屏幕剩余空间(减去layout_margins),按钮内的文本和图像应自动缩放以填充按钮(减去padding)。外边距也应自动缩放。
我的第一个想法是使用相对布局来定位按钮,并使用layout_margin/padding属性创建边距。然而,相对布局和layout_margin/padding需要固定像素值,因此它们不可扩展。
然后我考虑使用嵌套线性布局和layout_weights来定位按钮,并使用占位符视图创建边距。虽然这些技术是可伸缩的,但它们无法与按钮一起使用,因为按钮具有许多属性(文本大小、图像大小、角半径等)需要固定像素值。这个限制意味着,例如,以下xml:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
以下自定义Togglebuttons和Imagebuttons的宽度和高度应自动缩放以填充屏幕剩余空间(减去layout_margins),按钮内的文本和图像应自动缩放以填充按钮(减去padding)。外边距也应自动缩放。
我的第一个想法是使用相对布局来定位按钮,并使用layout_margin/padding属性创建边距。然而,相对布局和layout_margin/padding需要固定像素值,因此它们不可扩展。
然后我考虑使用嵌套线性布局和layout_weights来定位按钮,并使用占位符视图创建边距。虽然这些技术是可伸缩的,但它们无法与按钮一起使用,因为按钮具有许多属性(文本大小、图像大小、角半径等)需要固定像素值。这个限制意味着,例如,以下xml:
<ToggleButton
android:layout_weight="1"
style="@style/myButton"
[...] />
<View
android:layout_weight="1"/>
<ImageButton
android:layout_weight="1"
style="@style/myButton"
[...] />
这并不一定会使得两个按钮和它们之间的空间具有相同的宽度。这完全取决于按钮的文本大小、图像大小等等。
我已经查看了this question,但我觉得对于这样一个简单的问题应该有更简单的解决方案,不需要过多使用非XML。
<item name="android:background">@drawable/myButton</item>
,其中myButton是每个状态的形状选择器。但是,根据您在博客文章中的使用情况,似乎您正在将TextDrawable用作ImageView的背景,而我不认为视图可以有两个背景。 - 1''setImageDrawable()
和setBackgroundDrawable()
之间存在差异。 我的理解是,我应该通过XML将按钮定位并设置其backgroundDrawable为选择器,然后在Java中通过findViewByID
获取按钮,并将其imageDrawable设置为TextDrawable,这样做对吗? - 1''ImageView
或ImageButton
并将TextDrawable
设置为内容而不是背景。这是因为您可以使用像FIT_CENTER
这样的ScaleType
使文本填充视图空间。对于Button
(其内容是纯文本),您无法将内容设置为 Drawable,只能设置背景。还要注意的是,这种方法的一个缺点是您无法在 XML 中定义自定义 Drawable 类型,因此将其添加到样式中并不是真正可能的。 - devunwired