Android:如何使用屏幕尺寸缩放布局

标签 android android-layout android-xml

考虑这个布局(来自 here ):

enter image description 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/

相关文章:

Android XML 有没有办法将工具命名空间与自定义属性一起使用?

java - 如何将毫秒转换为一天中的时间?

android - 安卓虚拟机无法安装Ministro服务

android - 是否可以使用语音命令而不是使用滑动手势进行导航?

android - Android 应用中的人像、风景

android - Android 中的自定义 EditText 边框

android - 没有在移动设备中收到我的 Android 应用程序的更新通知

android - 警报对话框 : How To Remove Black Borders Above and Below View

android - Android Studio 中的 ViewPager 预览布局

android - 滚动回收站 View 项目时滚动标题