如何为纵向和横向指定不同的布局?


142

我已经看到了有关能够为一个活动指定两个单独的布局xml文件的参考,其中一个为纵向,一个为横向。我还没有找到有关如何执行此操作的任何信息。如何为每个活动指定哪个xml文件是纵向布局,哪个是横向布局?

是否还可以为不同的屏幕尺寸指定不同的布局?如果是这样,这是怎么做的?

Answers:


203

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


3
如果这样做,是否意味着所有活动都需要定义风景和人像视图?
杰·阿斯克伦

20
不可以,如果不存在布局区域定义,则仅使用标准布局目录中的XML布局。
Mark B 2010年

就我而言,当我使用android:configChanges =“ orientation | keyboardHidden | screenSize”时,layout-land无法正常工作
Tushar Pandey

9
从android:configChanges =“ orientation | keyboardHidden | screenSize”中删除方向
Ushal Naidoo 2014年

60

您只需要将其放在单独的文件夹中,根据方向和分辨率将其命名为不同的名称,设备将自动为其屏幕设置选择合适的文件夹

更多信息在这里:

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

在“用于屏幕尺寸和密度的资源目录限定符”下


仅适用于1.6或更高版本的OS。如果要支持1.5,则需要以下链接: developer.android.com/guide/practices/screens-support-1.5.html
Scott Biggs

2
@Silvio Donnini-链接不再具有必需的信息。
itsaboutcode 2012年

2
@itsaboutcode是的:转到“使用配置限定符”
Danation 2012年

26

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

在此处输入图片说明


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

“您的项目目录\ app \ src \ main \ res”

从那时起,此子文件夹下的所有layout.xml文件将仅自动用于横向模式。

将“布局端口”用于纵向模式。


1
这对我有用。我按照指示添加了一个新的布局文件,其名称与纵向版本相同。Android Studio会自动为该布局创建一个文件夹。一种布局用于纵向,另一种布局用于横向。旋转屏幕时会自动显示新的布局。
Smitty-Werben-Jager-Manjenson,

23

只是提醒:

删除orientationandroid:configChanges属性的活动在您的清单xml文件,如果你定义它:

android:configChanges="orientation|screenLayout|screenSize"

1
如果我的清单中需要android:configChanges =“ orientation | screenLayout | screenSize”怎么办,因为我的某些片段可以同时处于方向,而有些则不需要,但是对于那些片段,仍然需要分别为横向和纵向布局可以动态改变方向?
natansalda

9

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

1.转到活动布局的设计选项卡

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

在此处输入图片说明


4

我认为最新的Android版本中最简单的方法是进入XML(而非文本)的设计模式。

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

在此处输入图片说明

希望这对您有用。


3

创建一个新目录layout-land,然后xmllayout-landlayout目录相同的名称下创建文件,并在 此处将您的内容对齐为横向模式。

请注意,两者的内容ID xml相同。


3

下面的最后一行是应用两个量词的示例:横向和最小宽度(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/


2

或使用此:

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

0
  1. 右键单击res文件夹,
  2. 新增-> Android资源文件
  3. 在可用的限定词中,选择方向,
  4. 添加到选择的限定词
  5. 在“屏幕方向”中,选择“横向”
  6. 按确定

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

在此处输入图片说明


2
不正确 您没有使用文件夹查看模式(例如“项目”)。您可能正在使用“ Android”查看模式,该模式将文件分组在一起,就像您在虚拟文件夹中的屏幕快照一样,但是实际的文件夹结构仍然是此处每篇其他文章所描述的。
星期一
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.