分类:C#、Android、VS2015;创建日期:2016-02-06

为了控制屏幕的放置方向(纵向、横向),可以在Resource下同时定义两种不同的布局文件夹:layout和layout-land,这样一来,系统就会根据当前屏幕的放置方向自动请求合适的布局。

注意:<Ctrl>+<F11>是控制模拟器“竖屏/横屏”转换的快捷键。

1、layout和layout-land

要点:

纵向放置方式(portrait,肖像模式)使用的资源保存在layout文件夹下。

横向放置(landscape,景观模式)使用的资源保存在layout-land文件夹下。

默认情况下,当旋转屏幕时,文字会自动旋转(见layout文件夹下的Main.axml源代码)。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/myButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"/>
</LinearLayout>

这样设置的好处是:当在设计模式下将屏幕横放时,它就会自动旋转文字。

除了布局文件夹默认的纵向放置方式(portrait)以外,还可以命名一个layout-land文件夹(意为landscape)让其横向放置,而且不需要添加任何代码。

如果layout下有一个Main.axml文件,而且layout-land下也包含一个Main.axml文件,那么,当屏幕横放时,Android就会自动加载layout-land下的Main.axml。

2、在drawable文件夹下指定旋转后使用的绘制资源

与layout和layout-land相似,如果将纵向屏幕和横向屏幕使用的可绘制资源分别保存在Resources/drawable文件夹和Resources/drawable-land文件夹下,旋转屏幕方向时系统同样会自动获取相应的资源文件。例如,在Resources/drawable文件夹下有一个Monkey.png文件,XML描述如下:

<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/monkey"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />

如果Resources/drawable-land下也有一个Monkey.png,那么,当屏幕横向放置时,它就会自动呈现Resources/drawable-land下的Monkey.png,如下图所示。

3、通过程序控制屏幕旋转

有时我们可能需要在代码中定义布局。与使用XML资源时系统会自动处理屏幕放置不同,当以编程方式添加控件时,必须考虑控件放置的方向。即:必须执行下面的步骤:

  • 创建布局。
  • 设置布局参数。.
  • 创建控件。
  • 设置控件的布局参数。
  • 添加控件到布局中。
  • 将布局作为视图来呈现。

例如,下面的代码将一个TextView添加到RelativeLayout中:

protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle); var rl = new RelativeLayout (this);
var layoutParams = new RelativeLayout.LayoutParams (
ViewGroup.LayoutParams.FillParent,
ViewGroup.LayoutParams.FillParent);
rl.LayoutParameters = layoutParams; var tv = new TextView (this);
tv.LayoutParameters = layoutParams;
tv.Text = "Programmatic layout"; rl.AddView (tv);
SetContentView (rl);
}

下图是运行效果:

4、在代码中判断屏幕放置方式

Android提供了一个WindowManager类,在C#代码中,可在OnCreate中通过WindowManager.DefaultDisplay.Rotation属性确定当前设备的放置方向,如下所示:

protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle); var rl = new RelativeLayout (this);
var layoutParams = new RelativeLayout.LayoutParams (
ViewGroup.LayoutParams.FillParent,
ViewGroup.LayoutParams.FillParent);
rl.LayoutParameters = layoutParams; var surfaceOrientation = WindowManager.DefaultDisplay.Rotation;
// create layout based upon orientation
RelativeLayout.LayoutParams tvLayoutParams; if (surfaceOrientation == SurfaceOrientation.Rotation0 ||
surfaceOrientation == SurfaceOrientation.Rotation180)
{
tvLayoutParams = new RelativeLayout.LayoutParams (
ViewGroup.LayoutParams.FillParent,
ViewGroup.LayoutParams.WrapContent);
}
else
{
tvLayoutParams = new RelativeLayout.LayoutParams (
ViewGroup.LayoutParams.FillParent,
ViewGroup.LayoutParams.WrapContent);
tvLayoutParams.LeftMargin = ;
tvLayoutParams.TopMargin = ;
} var tv = new TextView (this);
tv.LayoutParameters = tvLayoutParams;
tv.Text = "Programmatic layout";
rl.AddView (tv);
SetContentView (rl);
}

当将屏幕从纵向旋转为横向时,运行效果如下图所示:

【Android】4.3 屏幕布局和旋转的更多相关文章

  1. Qt for Android 程序禁止屏幕旋转

    有时候我们希望让一个程序的界面始终保持在一个方向,不随手机(平板)方向旋转而变化:在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入 android:screen ...

  2. 设置Android默认锁定屏幕旋转

    /********************************************************************************** * 设置Android默认锁定屏 ...

  3. Android 7.1 屏幕旋转流程分析

    Android 7.1   屏幕旋转流程分析 一.概述 Android屏幕的旋转在framework主要涉及到三个类,结构如图 PhoneWindowManager:为屏幕的横竖屏转换的管理类. Wi ...

  4. android 很多牛叉布局github地址(转)

    原文地址 http://blog.csdn.net/luo15309823081/article/details/41449929 点击可到达github-------https://github.c ...

  5. Android中的LinearLayout布局

    LinearLayout : 线性布局 在一般情况下,当有很多控件需要在一个界面列出来时,我们就可以使用线性布局(LinearLayout)了,  线性布局是按照垂直方向(vertical)或水平方向 ...

  6. Android之Linearlayouy线性布局

    写了个小例子xml代码如下: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout x ...

  7. Android开发-之五大布局

    在html中大家都知道布局是什么意思了,简单来说就是将页面划分模块,比如html中的div.table等.那么Android中也是这样的.Android五大布局让界面更加美化,开发起来也更加方便.当然 ...

  8. Android中的五大布局

    Android中的五大布局 1.了解布局 一个丰富的界面总是要由很多个控件组成的,那我们如何才能让各个控件都有条不紊地 摆放在界面上,而不是乱糟糟的呢?这就需要借助布局来实现了.布局是一种可用于放置很 ...

  9. IOS屏幕布局

    1.iPad和iPhone的屏幕布局 在IB中,屏幕或控件的尺寸以点为单位.在视网膜技术中,1个点包括4个像素,而没有采用视网膜屏幕技术的还是1个点包括1个像素. 2.绝对布局和相对布局 3.使用Au ...

随机推荐

  1. Linux下C与Mysql的混合编程

    1 概述 MySQL 是一个关系型数据库管理系统.由瑞典MySQL AB公司开发,眼下属于Oracle公司.MySQL是最流行的关系型数据库管理系统. 支持AIX.FreeBSD.HP-UX.Linu ...

  2. Hibernate框架简介(二)基本使用增、删、改、查

    一.Hibernate框架简介 Hibernate是一个优秀的Java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationalMapping)工具 1.1.理解持久化 瞬 ...

  3. Hadoop的简单使用

    Hadoop的简单使用 使用Hadoop提供的命令行,向文件系统中创建一个文件. ./hadoop fs -put temp.txt hdfs://localhost:8888/ 说明: ./hado ...

  4. eclipse 将javaWeb项目转化成maven项目

      eclipse 将javaWeb项目转化成maven项目 CreateTime--2018年4月18日16:04:18 Author:Marydon 1.首先,maven项目的标准目录 2.web ...

  5. Windows下安装Redmine 2.5.2不全然指南

    我决定在项目中引入Redmine来管理开发任务和计划,至于Redmine的优点,请问度娘或者脑补一下. 互联网搜索到的.基本上都是旧版本号的. 1.2.1 的最多,我要新的啊,所以仅仅好自己来啦. 本 ...

  6. document.ready、window.onload、body.onload的区别

    document的ready事件通常会比window的onload事件先发生,为什么呢? 因为document的ready是在浏览器加载解析并构建完doc文档模型时发生的,而window的onload ...

  7. Cygwin--unix/linux模拟环境

    Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多有用的工具,著名的还有eCos,不过现已被Redhat收购).它 ...

  8. maven 继承关系和聚合

    maven继承管理 让版本的管理只在一个地方改变 modules用于聚合,把执行的项目都放到同一的地方用module包括,可以省去一个个项目去mvn install,这样可以所有项目一次聚合 mvn ...

  9. HDUOJ---1195Open the Lock

    Open the Lock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  10. 一道SQL题

    原题:大池子博客 给定一个access_time表,它记录了用户每个月访问网站的次数,包括三个域:用户.时间.次数.注意表中可能包含用户在1月份的多条记录. 要求查询用户.月份.月累计.总共累计四项的 ...