安卓布局缩放

4
如果您将Android清单文件中的目标SDK版本设置为“3”,那么在大屏幕设备上,您的布局只是小屏幕设备上的缩放版本。一旦您将目标SDK设置为更高的SDK,您可以为每个屏幕密度创建单独的布局,这提供了更好的用户体验。
然而,我的布局主要由图片组成,它们的分辨率足够高,即使在缩放时也可以在所有屏幕尺寸上正常显示,因为它们足够大,不需要被拉伸。现在,对我来说,创建一个小屏幕布局并将其放大会更容易,因为它仍然在大屏幕上看起来很好。有没有办法在不返回API级别3的情况下获得这种效果?
5个回答

6
你可以使用权重参数。
“weight”是一个术语,用于指定在绘制后如果还有空间,特定视图应占据屏幕的多少。
简单地创建一个LinearLayout并将两个TextView放置其中,如下所示:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="small"
    android:layout_weight="0.2"
    android:background="#123" />
 <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.8"
    android:text="huge"
    android:background="#456"
 />
</LinearLayout>

您会注意到视图会相应地占据空间。您可以为较小的屏幕创建任何布局,并指定权重属性,一切都会被美观地调整。

同时,请确保您没有布局会覆盖您想要的布局,即如果您有一个具有相同名称的布局-xlarge文件夹,则实时编译器将在xlarge屏幕(10英寸平板电脑)上选择来自布局-xlarge文件夹的布局。请注意,这里有一个布局文件夹(wanted)。 - Aiden Fry
2
这适用于定位视图,但是假设我想缩放像边框宽度这样以“dp”设置的东西。实际的TextView将根据屏幕大小进行缩放,但是边框小部件和文本大小(以及在“dp”中设置的任何其他内容)将根据屏幕大小而不成比例。 - Shlomo Zalman Heigh
@Not Me 好的,这里有一个非常有用的关于布局设计的链接。它将为您提供一些关于Android框架如何解决屏幕尺寸问题的想法。 http://mobile.smashingmagazine.com/2012/07/26/android-design-tips/ - Irfan Ul Haq
2
我是一名相对有经验的Android开发者,我了解布局和Android UI的工作原理。但是当我没有必要时(因为手机UI在平板电脑上看起来完全正常),不得不使布局按比例缩放(像我通常做的那样)真的很烦人。在这种情况下,更加复杂,因为每个屏幕密度都必须非常精确地对齐(到像素级),所以不得不为每个屏幕密度缩放所有内容非常困难。 - Shlomo Zalman Heigh

4

只需不为较大的屏幕指定布局即可。默认情况下,除非有更具体的布局可用,否则它会在所有屏幕上使用相同的布局。如果您将宽度和高度设置为match_parent,并将图像设置为scaleType="fitCenter""centerCrop"--类似这样的内容,它应该填充运行的任何屏幕大小。


2
不要忘记让你的应用程序兼容平板电脑。您必须添加 <\tablet> 标签。
<supports-screens
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:xlargeScreens="true" />

在您的应用程序清单中。

1
我非常确信默认情况下所有这一切都是正确的。 - Gabriel Netto

0

嗯,我认为只要你不使用类似于AbsoluteLayout这样的东西,Android已经可以做到这一点了。有一些技巧可以帮助过渡。不太确定问题在问什么,但我会尝试回答。API级别3是否与纵横比缩放有关?

我发现从手机到平板电脑的大多数UI丑陋都与宽度有关。您可以放置逻辑以在特定分辨率下修复宽度。否则,布局看起来和行为良好。还有其他技巧,例如使用不同的dimens.xml调整资产大小,并为不同的屏幕大小和密度设置不同的dimens.xml集。

您不必在每个版本中都拥有每个单独的维度。您只需要拥有每个值集的基本版本,并且可以在其他文件中设置不同的维度。


-1

通过不同的屏幕尺寸调整图像大小的唯一方法是使用九宫格。以下是有关该主题的更多资源:http://developer.android.com/tools/help/draw9patch.html

我相信您在布局中唯一能做的就是使用相对宽度/高度(权重)和九宫格格式化的图像。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接