分类: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描述如下:

<ImageViewandroid: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);
}

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

转载于:https://www.cnblogs.com/rainmj/p/5184085.html

【Android】4.3 屏幕布局和旋转相关推荐

  1. 在Android中处理屏幕布局变化

    说明 以编程方式处理屏幕布局,锁定屏幕布局.控制活动生命周期,本文简明讲述以编程方式管理屏幕布局,每个小节都聚焦于这个主题的不同方面. 手动处理布局变化 首个显要的讨论点是如何手动处理布局变化. 一个 ...

  2. android 获取屏幕旋转方向,android获取手机屏幕尺寸和旋转方向

    布局文件main.xml: android:layout_width="fill_parent" android:layout_height="fill_parent&q ...

  3. Android之随用户的角度旋转屏幕

    一个良好的播放器应该能够很好地随着用户的视角而改变播放的角度,也就是说能够实现自动旋转.今天,费了好长时间才弄懂屏幕的自动旋转,现在来做个总结. 实现屏幕的手动旋转 在activity中有个方法,se ...

  4. Android 屏幕横屏和旋转问题

    一般我们希望横屏展示可以有以下操作 1,将屏幕旋转,这样很简单 控件我们只要 android:rotation="90" 整个布局我们只要 android:screenOrient ...

  5. Android开发中EditText获得焦点弹出输入框改变屏幕布局的问题

    在Android开发中,比较头疼的问题就是EditText总是已启动就获得焦点并弹出输入框,感觉很是不爽.而且,因为输入框的弹出,导致屏幕布局获得改变,有些空间被挤压到一起,很是难看,所以,我就上网搜 ...

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

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

  7. android布局高度大于屏幕高度,Android CoordinatorLayout + AppbarLayout + Viewpager布局超过屏幕高度...

    当我把Viewpager与CoordinatorLayout + AppbarLayout + Viewpager一起使用时,viewpager超出屏幕大小,请帮我解决.Android Coordin ...

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

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

  9. 1._请写出5种以上的android中界面常用布局方式,跳槽季“充电宝”Android面试题(一)...

    1.请介绍下Android中常用的5种布局 Android中常用的5种布局分别为:FrameLaout(框架布局).LinearLayout(线性布局).AbsoluteLayout(绝对布局).Re ...

最新文章

  1. 【51NOD-0】1012 最小公倍数LCM
  2. visual studio解决方案是什么?
  3. html5 无障碍,[Vue 3] 教程 – 无障碍 – 基础
  4. 2006的最后一篇之学车大结局
  5. 没有在该机执行windows脚本宿主的权限_解决办法
  6. android开发之android:padding和android:margin的区别
  7. 网络学习(一)网络版块主题介绍
  8. 深入浅出MFC学习笔记(第三章:MFC六大关键技术之仿真:命令传递) .
  9. 流畅的python不适合初学者_年度最值得关注Python进阶书——《流畅的Python》
  10. 实用常识 | 写论文时如何引用插入脚注 / 如何自定义脚注符号 / 如何将多个脚注合并在一起
  11. 滴滴出行app——网约车出行的背后(下)
  12. Python 转义字符与原字符
  13. 多头平仓,白糖再度下跌
  14. 一个简单的OPPO商城页面
  15. 首个ChatGPT开发的应用上线;ChatMind思维导图工具;中文提示词大全;Copilot平替 | ShowMeAI日报
  16. 下载pyboard的flash中的驱动程序_驱动人生下载-驱动人生绿色最新下载正式版
  17. Dwarves (有向图判环)
  18. Atlas2.1.0实战:安装、配置、导入hive元数据、编译排坑
  19. SpringBoot集成Elasticsearch7.4 实战(一)
  20. 嵌入式开发教程哪家好?云计算培训如何学?

热门文章

  1. linux命令关闭电脑,SELinux关闭命令详解linux操作系统 -电脑资料
  2. 刘夏真的简历中国科学院计算机所,专家人才库数据----中国科学院计算技术研究所...
  3. 怎样用计算机进入手机驱动程序,手机驱动怎么安装?
  4. Modelsim仿真查看内部信号
  5. linux 软件集成工具箱,在PB中动态修改SQL语句
  6. 【Verilog HDL 训练】第 05 天(序列检测)
  7. 【 MATLAB 】离散傅里叶级数(DFS)及 IDFS 的 MATLAB 实现
  8. 洛谷 P1843 奶牛晒衣服
  9. Spring进行表单验证
  10. c++ clr编译dll在c#调用时出现“试图加载不正确的格式”“找不到dll”错误的解决...