【问题标题】:Android: alternate layout xml for landscape modeAndroid:横向模式的备用布局xml
【发布时间】:2011-06-18 23:39:00
【问题描述】:

我怎样才能有一种横向布局和一种纵向布局?当用户将手机侧向旋转时,我想假设额外的宽度并节省垂直空间。

【问题讨论】:

    标签: android layout resources android-layout orientation


    【解决方案1】:

    默认情况下,/res/layout 中的布局适用于纵向和横向。

    如果你有例如

    /res/layout/main.xml
    

    您可以添加一个新文件夹/res/layout-land,将main.xml 复制到其中并进行必要的调整。

    有关更多选项,另请参阅 http://www.androidpeople.com/android-portrait-amp-landscape-differeent-layoutshttp://www.devx.com/wireless/Article/40792/1954

    【讨论】:

    • 我是否应该保留名称 layout-land 或任何其他词 @marapet
    • 你不能用别的词
    • 我的背景图像在横向上延伸。我有布局和可绘制区域..仍然延伸..我尝试使用相同的图像、9 补丁图像、mdpi、hdpi n所有..问题仍然存在:(
    • portrait这个词是什么
    • @dsdsdsdsd 根据 Android studio 它是 layout-port
    【解决方案2】:

    在当前版本的 Android Studio (v1.0.2) 中,您可以通过单击下面屏幕截图中显示的可视化编辑器中的按钮来简单地添加横向布局。选择“创建景观变化”

    【讨论】:

    • 除非它在您的layout-land 文件夹中放置一个新副本。知道如何从那里调用布局吗?无法使用R.layout.layout_name。我正在尝试在配置更改时手动配置我自己的布局,谢谢。
    • @NoniA。它应该检测手机何时切换到横向并自动从布局中调用。
    • @Distwo 但问题是,如果应用程序以纵向模式运行,它将关闭,我必须继续在横向模式下使用它,因为我在 MainActivity.java 中使用了一些元素类被创建。真正制作这个 Android 的人是愚蠢的,认真的
    • 您需要正确地构建视图和模型。这是一篇关于在配置更改中保留数据的文章。 developer.android.com/guide/topics/resources/runtime-changes
    【解决方案3】:

    除非您另外指定,否则 /res/layout 中的布局适用于纵向和横向。假设我们的主页有 /res/layout/home.xml,我们希望它在 2 种布局类型中看起来不同。

    1. 创建文件夹 /res/layout-land(您将在此处保留经过横向调整的布局)
    2. 在那里复制 home.xml
    3. 对其进行必要的更改

    Source

    【讨论】:

    • “肖像”呢?
    • 新的 限定词怎么样?
    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案5】:

      我会尽快解释。

      首先,您可能会注意到现在您应该按照 google 的要求使用 ConstraintLayout(请参阅 android 库)。

      在您的 android studio 项目中,您可以通过创建额外的 res/layout/ 目录来提供特定于屏幕的布局。每个屏幕配置需要不同的布局。

      这意味着您必须在两种情况下都使用 目录限定符

      • Android 设备支持
      • Android 横向或纵向模式

      因此,这里有一个例子:

      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
      

      您还可以使用dimens.xml 将限定符与res 资源文件一起使用。

      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/dimens.xml

      <resources>
          <dimen name="grid_view_item_height">70dp</dimen>
      </resources>
      

      res/values-land/dimens.xml

      <resources>
          <dimen name="grid_view_item_height">150dp</dimen>
      </resources>
      

      your_item_grid_or_list_layout.xml

      <androidx.constraintlayout.widget.ConstraintLayout
              android:id="@+id/constraintlayout"
              android:layout_width="match_parent"
              android:layout_height="wrap_content
      
          <ImageView
                  android:id="@+id/image"
                  android:layout_width="0dp"
                  android:layout_height="@dimen/grid_view_item_height"
                  android:layout_marginEnd="8dp"
                  android:layout_marginStart="8dp"
                  android:layout_marginTop="8dp"
                  android:background="@drawable/border"
                  android:src="@drawable/ic_menu_slideshow">
      
      </androidx.constraintlayout.widget.ConstraintLayout>
      

      来源:https://developer.android.com/training/multiscreen/screensizes

      【讨论】:

        【解决方案6】:

        您可以将您的特定布局分组到正确的文件夹结构下,如下所示。

        layout-land-target_version

        layout-land-19 // 目标 KitKat

        同样,您可以创建布局。

        【讨论】:

        • 感谢您的回答,但我看不出您的回答有什么帮助,因为这个问题已经得到解答。也许您可以解释-19 后缀的好处?这有什么帮助吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多