第4章(4) 屏幕布局和旋转

分类: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 = 100;
    tvLayoutParams.TopMargin = 100;
  }

  var tv = new TextView (this);
  tv.LayoutParameters = tvLayoutParams;
  tv.Text = "Programmatic layout";
  rl.AddView (tv);
  SetContentView (rl);
}

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

时间: 2024-12-28 15:09:53

第4章(4) 屏幕布局和旋转的相关文章

IOS屏幕布局

1.iPad和iPhone的屏幕布局 在IB中,屏幕或控件的尺寸以点为单位.在视网膜技术中,1个点包括4个像素,而没有采用视网膜屏幕技术的还是1个点包括1个像素. 2.绝对布局和相对布局 3.使用AutoLayout布局 i.AutoLayout为空间布局定义了一套约束(constraint),约束定义了控件与视图之间的关系. ii.在垂直距离的约束属性设定中, Relation:指设定的距离之间的关系,包括3个选项——等于.大于等于和小于等于. Constant:约束数值. Priority:

第27章 CSS传统布局(上)

第 27章 CSS传统布局[上]学习要点:1.布局模型2.表格布局3.浮动布局 本章主要探讨 HTML5中 CSS早期所使用的传统布局,很多情况下,这些布局方式还是非常有用的.一.布局模型在早期没有平板和智能手机等移动设备大行其道的时期,Web页面的设计主要是面向PC端电脑分辨率展开的.这种分辨率比例比较单一,基本上只要满足最低分辨率设计即可.一般来说有 4:3.16:10.16:9这样的主要分辨率.那么,从这种比例上来看,长度总是大于宽度的.从最低分辨率 1024 * 768设计即可.为了使浏

第27章 CSS传统布局(下)

第 27章 CSS传统布局[下]学习要点:1.定位布局2.box-sizing3.resize 本章主要探讨 HTML5中 CSS早期所使用的传统布局,很多情况下,这些布局方式还是非常有用的.一.定位布局在使用定位布局前,我们先了解一下定位属性的用法.CSS2提供了position属性来实现元素的绝对定位和相对定位. 属性 说明static 默认值,无定位.absolute 绝对定位,使用 top.right.bottom.left进行位移.relative 相对定位,使用 top.right.

9重点第九章开窗函数与表旋转(转载)

9重点第九章开窗函数与表旋转 小结: 由于开窗函数的起点是基础查询的结果集合,并且基础查询的结果集合只有到 SELECT 阶段时才生成,因此,开窗函数仅能用于查询的 SELECT 和ORDER BY 子句. 1. 开窗函数包括:排名开窗函数(ROW_NUMBER(), RANK()等),聚合开窗函数如(AVG,SUM等).在 SQLSERVER 2012 中,还提供了4个偏移开窗函数: LAG, LEAD , FIRST_VALUE和LAST_VALUE 此外,2012 开始支持了 对聚合的排序

屏幕布局

移动应用开发比桌面应用更难开发,同样一个应用的iPad版本不应该是简单地将iPhone界面放大,而是需要重新布局的. 第1代和第2代iPad屏幕的物理尺寸是9.7英寸,分辨率是1024*768像素,第3代iPad采用视网膜屏幕技术,分辨率达到了2048*1536,而iPad mini的分辨率达到了1024*768像素. 在iPhone4之前,屏幕的物理尺寸是3.5英寸,屏幕分辨率是480*320像素.iPhone4 和iPhone 4S采用视网膜屏幕技术,屏幕的物理尺寸为3.5英寸,分辨率达到了

单击Android设备后退键,主屏幕键以及旋转屏幕如何影响Activity的生命周期

单击设备的后退键,相当于通知Android系统“我已完成activity的使用,现在不需要它了.”接到指令后,系统立即销毁了activity.即调用onPause()->onStop()->onDestroy() 单击主屏幕键,相当于通知Android“我去别处看看,稍后可能回来.”此时,为快速响应随时返回应用,Android只是暂停当前activity而并不销毁它.即调用onPause()->onStop(),但是并没有调用onDestroy(). 注意:停止的activity能够存在

第 27 章 CSS 传统布局[上]

学习要点: 1.布局模型 2.表格布局 3.浮动布局 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS 早期所使用的传统布局,很多情况下,这些布局方式还是非常有用的. 一.布局模型 在早期没有平板和智能手机等移动设备大行其道的时期,Web 页面的设计主要是面向 PC 端电脑分辨率展开的.这种分辨率比例比较单一,基本上只要满足最低分辨率设计即可.一般来说有 4:3.16:10.16:9 这样的主要分辨率.那么,从这种比例上来看,长度总是大于宽度的.从最低分辨率 1024 * 768 设计即可

ACCP8.0Y2Web前端框架与移动应用开发第1章响应式布局

一.单词部分 ①flex弹性布局  ②flex-direction伸缩方向 ③justify-content对齐 ④align-items对齐属性 ⑤align-content垂直布局 ⑥media媒体 ⑦device-width设备宽度 ⑧orientation方向 ⑨landscape竖屏 portraint横屏 二.预习部分 1.Flex布局的好处 可以适应不同屏幕大小的变化时元素位置的变化 2.媒体查询有什么作用 向不同设备提供不同样式的一种不错方式提升用户体验 3.响应式布局的优点 解

第 27 章 CSS 传统布局[下]

学习要点: 1.定位布局 2.box-sizing 3.resize 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS 早期所使用的传统布局,很多情况下,这些布局方式还是非常有用的. 一.定位布局 在使用定位布局前,我们先了解一下定位属性的用法.CSS2 提供了 position 属性来实现元素的绝对定位和相对定位. 属性 说明 static 默认值,无定位. absolute 绝对定位,使用 top.right.bottom.left进行位移. relative 相对定位,使用 top.