考虑这个布局(从这里拉):
我想了解使这种布局随屏幕尺寸缩放的原理。对于正方形,自定义 onMeasure 函数可以很好地工作:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
下面的自定义 Togglebuttons 和 Imagebuttons 的宽度和高度应缩放以填充屏幕的其余部分,减去 layout_margins,并且其中的文本和图像应缩放以填充按钮,减去填充。外边距也应该缩放。
我的第一个想法是使用相对布局来定位按钮,并使用 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"
[...] />
不一定会使两个按钮以及它们之间的空间都具有相同的宽度。这完全取决于按钮的文本大小、图像大小等。
我已经看了一下这个问题,但我觉得对于这样一个简单的问题应该有一个更简单的解决方案,不需要求助于太多的非 XML。