【问题标题】:Android layout scalingAndroid 布局缩放
【发布时间】:2012-10-26 15:28:30
【问题描述】:

如果您将 Android 清单文件中的目标 SDK 版本设置为“3”,那么您在大屏幕设备上的布局将只是在小屏幕设备上的放大版本。将目标 SDK 设置为更高的 SDK 后,您可以为每个屏幕密度创建单独的布局,从而提供更好的用户体验。

然而,我的布局主要由图像组成,这些图像具有足够高的分辨率,可以在所有屏幕尺寸上正常显示,即使按比例放大,因为它们足够大,它们不会不需要被拉伸。现在,我更容易创建一个小屏幕布局并将其放大,因为它在大屏幕上仍然看起来不错。有什么方法可以在不返回 API 级别 3 的情况下获得这种效果?

【问题讨论】:

    标签: android android-layout scale android-screen-support


    【解决方案1】:

    您可以使用重量参数。
    “权重”是一个术语,用于指定特定视图在绘制后还有剩余空间时应该占据多少屏幕。

    只需创建一个LinearLayout 并在其中放置两个TextViews

    <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>
    

    您会注意到视图如何相应地占用空间。您可以为更小的屏幕创建任何您想要的布局并指定权重属性,并且每件事都会得到精美的调整

    【讨论】:

    • 还要确保您没有会覆盖您想要的布局的布局,即。有 layout 文件夹(需要),但如果您有一个 layout-xlarge 文件夹,其布局名称相同,编译器会实时从 xlarge 屏幕(10" 平板电脑)上的 layout-xlarge 文件夹中选择一个跨度>
    • 这适用于定位视图,但假设我想要缩放诸如在dp 中设置的边框宽度之类的东西。实际的TextView 将根据屏幕大小进行缩放,但边框小部件和文本大小(以及在dp 中设置的任何其他内容)将根据屏幕大小不成比例。
    • @Not Me Well 这是这个非常有用的布局设计链接。它将让您了解 android 框架如何帮助解决屏幕尺寸问题。 mobile.smashingmagazine.com/2012/07/26/android-design-tips
    • 我是一位经验丰富的 Android 开发人员,我了解布局以及 Android UI 的工作原理。当我完全没有理由(因为手机用户界面在平板电脑上看起来非常好)时,不得不让布局缩放(就像我通常做的那样)只是一件令人头疼的事情。在这种情况下,它要复杂得多,因为所有东西都必须非常精确地对齐(到像素)以满足我的要求,所以很难为每个屏幕密度缩放所有东西。
    【解决方案2】:

    只是不要为大屏幕指定布局。默认情况下,它对所有屏幕使用相同的屏幕,除非有更具体的布局可用。如果您使用match_parent 作为宽度和高度,并将图像使用scaleType="fitCenter""centerCrop" —— 类似的东西,它应该填满运行它的任何屏幕尺寸。

    【讨论】:

      【解决方案3】:

      别忘了让您的应用与平板电脑兼容。您必须添加

      <supports-screens
          android:anyDensity="true"
          android:largeScreens="true"
          android:normalScreens="true"
          android:smallScreens="true"
          android:xlargeScreens="true" />
      

      在您的应用清单中。

      【讨论】:

      • 可以肯定的是,默认情况下所有这些都是真的。
      【解决方案4】:

      嗯。我认为只要您不使用 AbsoluteLayout 之类的东西,Android 就已经这样做了。有一些技巧可以帮助过渡。不完全确定问题在问什么,但我会试一试。 API 级别 3 是否随着纵横比或其他因素进行缩放?

      我发现从手机到平板电脑的大部分 UI 丑陋都与宽度有关。您可以使用逻辑来将宽度固定在某个分辨率。否则,布局看起来和行为都很好。还有其他技巧,例如使用不同的 dimens.xml 调整资产大小,以及为不同的屏幕尺寸和密度设置不同的 dimens.xml 集。

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

      【讨论】:

        【解决方案5】:

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

        我相信你唯一能做的就是在布局中使用相对宽度/高度(重量)和以 Ninepath 格式格式化的图像。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-05
          • 2019-02-05
          • 1970-01-01
          • 2013-09-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多