分类: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 文件查找,which,whereis,locate,find

    linux 文件查找,which,whereis,locate,find 一:which 主要用于查找可执行命令的所在位置: 如图,查找命令 ls的目录: 二:whereis 主要用于查找命令的帮助文 ...

  2. iOS \U7ea2 乱码 转换

    通常网络请求的数据,如果不做处理在输出时显示是 \U 之类的编码的: 不需要导入别的类库解决方法 - (NSString *)replaceUnicode:(NSString *)unicodeStr ...

  3. js 动画性能分析 transfrom

    1.动画实现代码 (1)使用定位实现: <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...

  4. H5中JavaScript常用代码片段

    /** * 批量替换方法,批量过滤特殊字符,通常用在通过后的各种编辑器添加的内容在App上编辑上使用 * james.wang 2016-11-11 * 使用方法:ReCont(Content,[&q ...

  5. MVC Linq动态排序

    在nuget 中searh System.Linq.Dynamic 安装对应的版本, 这样都可以使用了 var orderExpression = string.Format("{0} {1 ...

  6. SettingsHBuilder

      迁移时间:2017年5月20日10:56:50CreateTime--2016年9月27日14:22:26Author:Marydon1.修改HBuilder开发工具快捷键工具-->首选项- ...

  7. WebView和JavaScript如何实现相互调用

    WebView可以同JavaScript互相调用,因此我们可以用HTML和JavaScript来辅助编写Android应用. 示例:使用javaScript获取Android程序中的对象数据 clas ...

  8. [转载]windows7中没用boot.ini文件而是改用BCDEDIT来配置了

    原文地址:windows7中没用boot.ini文件而是改用BCDEDIT来配置了作者:开心骝哥 本人安装的Win7,因为机上有两个系统,一个dos系统,一个win7系统,开机时总是会在系统选择的界面 ...

  9. HDUOJ----1181 变形课

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submi ...

  10. HDUOJ---The number of divisors(约数) about Humble Numbers

    The number of divisors(约数) about Humble Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Lim ...