【问题标题】:How do I specify different layouts for portrait and landscape orientations?如何为纵向和横向指定不同的布局?
【发布时间】:2011-01-08 14:30:42
【问题描述】:

我看到了能够为一个活动指定两个单独的布局 xml 文件的引用,一个用于纵向,一个用于横向。不过,我还没有找到任何关于如何做到这一点的信息。如何为每个活动指定哪个 xml 文件是纵向布局,哪个是横向布局?

是否也可以为不同的屏幕尺寸指定不同的布局?如果是这样,这是如何完成的?

【问题讨论】:

    标签: android orientation landscape portrait


    【解决方案1】:

    创建一个 layout-land 目录并将布局 XML 文件的横向版本放在该目录中。

    【讨论】:

    • 如果我这样做,这是否意味着所有活动都需要定义横向和纵向视图?
    • 不,如果不存在 layout-land 定义,它只会使用标准布局目录中的 XML 布局。
    • 在我的情况下,layout-land 在我使用时不起作用,android:configChanges="orientation|keyboardHidden|screenSize"
    • 从 android:configChanges="orientation|keyboardHidden|screenSize" 中移除方向
    • 当我改变方向时,活动不会切换布局,在创建活动时保持布局。如果我从android:configChanges 中删除方向,则活动将被破坏。
    【解决方案2】:

    您只需根据方向和分辨率将其放在具有不同名称的单独文件夹下,设备将自动为其屏幕设置选择正确的文件夹

    更多信息在这里:

    http://developer.android.com/guide/practices/screens_support.html

    在“屏幕大小和密度的资源目录限定符”下

    【讨论】:

    【解决方案3】:

    对于鼠标爱好者!我说右键单击资源文件夹和Add new resource file,然后从可用限定符中选择orientation


    但您仍然可以手动操作,将子文件夹“layout-land”添加到

    "你的项目目录\app\src\main\res"

    从那时起,该子文件夹下的任何 layout.xml 文件将仅适用于横向模式自动

    纵向模式使用“layout-port”。

    【讨论】:

    • 这对我有用。我按照指示添加了一个与纵向版本同名的新布局文件。 Android Studio 自动为该布局创建了一个文件夹。一种布局用于纵向,另一种用于横向。旋转屏幕时会自动显示新布局。
    【解决方案4】:

    提醒一下:

    如果您定义了清单xml 文件中的活动,请从android:configChanges 属性中删除orientation

    android:configChanges="orientation|screenLayout|screenSize"
    

    【讨论】:

    • 如果我需要在我的清单中有 android:configChanges="orientation|screenLayout|screenSize" 怎么办,因为我的一些片段可以在两个方向上,有些则没有,但仍然需要单独的布局对于那些可以动态改变方向的片段的横向和纵向?
    • 如果我从 android:configChanges 中删除方向,当方向改变时,活动将被销毁。
    【解决方案5】:

    Android Studio 3.x.x 和 Android Studio 4.x.x 的最快方法

    1.进入活动布局的设计标签

    2.在顶部你应该按下预览按钮的方向,有一个创建横向布局的选项(检查图像),将创建一个新文件夹作为该特定方向的 xml 布局文件

    【讨论】:

    • 处理横向布局的最简单、最短的方法之一
    • 应该选择这个答案
    【解决方案6】:

    我认为在最新的 Android 版本中最简单的方法是转到 XML(不是文本)的设计模式。

    然后从菜单中选择选项 - 创建景观变化。 这将在几秒钟内轻松创建一个横向 xml。最新的 Android Studio 版本可让您立即创建横向视图。

    我希望这对你有用。

    【讨论】:

      【解决方案7】:

      创建一个新目录layout-land,然后在layout-land 中创建与layout 目录相同名称的xml 文件,并将您的内容对齐到横向模式。

      请注意,xml 中的内容 id 相同。

      【讨论】:

        【解决方案8】:

        下面的最后一行是应用两个量词的示例:横向和最小宽度(600dp)屏幕。用你需要的更新 600dp。

        res/layout/main_activity.xml                # For handsets
        res/layout-land/main_activity.xml           # For handsets in landscape
        res/layout-sw600dp/main_activity.xml        # For 7” tablets
        res/layout-sw600dp-land/main_activity.xml   # For 7” tablets in landscape
        

        以上内容也适用于尺寸

        res/values/dimens.xml                # For handsets
        res/values-land/dimens.xml           # For handsets in landscape
        res/values-sw600dp/dimens.xml        # For 7” tablets
        res/values-sw600dp-land/dimens.xml   # For 7” tablets in landscape
        

        一个有用的设备指标:https://material.io/tools/devices/

        【讨论】:

          【解决方案9】:

          或者使用这个:

          <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                      android:scrollbars="vertical" 
                      android:layout_height="wrap_content" 
                      android:layout_width="fill_parent">
          
            <LinearLayout android:orientation="vertical"
                          android:layout_width="fill_parent"
                          android:layout_height="fill_parent">
          
               <!-- Add your UI elements inside the inner most linear layout -->
          
            </LinearLayout>
          </ScrollView>
          

          【讨论】:

            【解决方案10】:
            1. 右键res文件夹,
            2. 新建 -> Android 资源文件
            3. 在可用限定符中,选择方向,
            4. 添加到选择的限定符
            5. 在屏幕方向中,选择横向
            6. 按确定

            使用 Android Studio 3.4.1,它不再创建 layout-land 文件夹。它将创建一个文件夹并将两个布局文件放在一起。

            【讨论】:

            • 不正确。您没有使用文件夹视图模式(如“项目”)。您可能正在使用“Android”查看模式,它将文件组合在一起,就像您在虚拟文件夹中的屏幕截图一样,但实际的文件夹结构仍然是此处所有其他帖子所描述的方式。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-25
            • 2019-04-03
            相关资源
            最近更新 更多