考虑这个布局(来自 here ):
我想了解使此布局随屏幕尺寸缩放的原理。对于正方形,自定义 onMeasure 函数效果很好:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
下面的自定义 Togglebutton 和 Imagebutton 的宽度和高度应该缩放以填充屏幕的剩余部分,减去 layout_margins,并且其中的文本和图像应该缩放以填充按钮,减去填充。外边距也应该缩放。
我的第一个想法是使用相对布局来定位按钮,并使用 layout_margin/padding 属性来创建边距。但是,相对布局和 layout_margin/padding 需要固定的像素值,因此它们不可缩放。
然后我想到使用带有 layout_weights 的嵌套线性布局来定位按钮,并使用占位符 View 来创建边距。尽管这些技术是可扩展的,但它们不适用于按钮,因为按钮有许多属性(文本大小、图像大小、圆角半径等)需要固定像素值。例如,此限制意味着以下 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。
最佳答案
如果您使用“dp”构建您的 View ,那么对于每个屏幕尺寸来说,它基本上都是相同的尺寸。
在大多数情况下,您会希望您的 View 会根据屏幕大小自动调整大小。
当然,在大多数情况下,您需要为平板电脑构建单独的布局。
但是,除此之外,我还可以建议您执行以下步骤:
1. 添加this库到您的项目。
2. 现在在您的布局中,您可以像这样编写 View :
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="I'm scalable!"
android:textSize="@dimen/_12sdp"/>
在此示例中,您的 TextView 将在每个屏幕尺寸上缩放。
3. 预览所有屏幕尺寸以查看结果。
关于Android:如何使用屏幕尺寸缩放布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14078460/