- 浏览: 173540 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
zhongyue1q:
您好,我想继续开发DBExplorer系统,您说说一下您的QQ ...
推荐一款使用Extjs做GUI的数据库浏览工具--DBExplorer -
huangyabin001:
你好现在遇到一个问题,我现在的工作是修改系统bug,现在有个b ...
Android2.1消息应用(Messaging)源码学习笔记之二 -
sunjunliangsunjun:
Android2.1消息应用(Messaging)源码学习笔记之二 -
java-admin:
1:bitbucket
免费支持private repo,最多 ...
Code host选择 -
jialeadmin:
期待下文字数补足
[翻译]Groovy入门指南——01初学者教程
详解Android中的屏幕方向
屏幕方向 是对Activity而言的,所以你可以在AndroidManifest.xml 文件中,通过<activity> 标记的screenOrientation 属性进行设定,例如:
<activity android:name=".SketchpadActivity" android:screenOrientation="landscape"/><!--让该Activity总是显示为横屏-->
screenOrientations属性共有7中可选值(常量定义在 android.content.pm.ActivityInfo类中 ) :
- landscape:横屏(风景照) ,显示时宽度大于高度;
- portrait:竖屏 (肖像照) , 显示时 高 度大于 宽 度 ;
- user:用户当前的首选方向;
- behind:继承Activity堆栈中当前Activity下面的那个Activity的方向;
- sensor:由物理感应器决定显示方向,它取决于用户如何持有设备,当 设备 被旋转时方向会随之变化——在横屏与竖屏之间;
- nosensor:忽略物理感应器——即显示方向与物理感应器无关,不管用户如何旋转设备显示方向都不会随着改变("unspecified"设置除外);
- unspecified :未指定,此为默认值,由Android系统自己选择适当的方向,选择策略视具体设备的配置情况而定,因此不同的设备会有不同的方向选择;
以上配置值会反映在Activity.getRequestedOrientation()方法的返回值中,与之对应的setRequestedOrientation()方法可以通过API的方式动态改变该属性的值,如以下示例将在横屏/竖屏两个方向上进行切换:
/* * 通过API动态改变当前屏幕的显示方向 */ public void apiChangeOrientation() { // 取得当前屏幕方向 int orient = getRequestedOrientation(); Logger.get().i("orientation:" + MyUtils.getOrientationName(orient)); // 若非明确的landscape或portrait时 再透过宽高比例的方法来确认实际显示方向 // 这会保证orient最终值会是明确的横屏landscape或竖屏portrait if (orient != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE && orient != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { //宽>高为横屏,反正为竖屏 int[] size = MyUtils.getDisplaySize(this); orient = size[0] < size[1] ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; Logger.get().i("w/h:" + MyUtils.getOrientationName(orient)); } if (orient == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }else{ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } }
通过setRequestedOrientation(xxx)方法设置与在AndroidManifest.xml文件中配置是等效的,因此通过以上例程明确指定方向后,Activity将不再自动根据物理传感器进行横竖屏切换,若要恢复,再调用setRequestedOrientation(UNSPECIFIED)即可。
另外, 还可以通过Configuration对象来取得Activity当前的显示方向:
// 通过Configuration对象 确认当前显示方向 Configuration conf = getResources().getConfiguration(); String orientName = "undefined"; switch (orient) { case Configuration.ORIENTATION_LANDSCAPE: orientName = "landscape"; case Configuration.ORIENTATION_PORTRAIT: orientName = "portrait"; case Configuration.ORIENTATION_SQUARE: orientName = "square"; default: orientName = "undefined"; } Logger.get().i("conf.orient:" + orientName);
需要注意的是两者(ActivityInfo和Configuration)有关方向的常量定义是不一致的,ActivityInfo中有关常量是用于决策显示方向的策略,而Configuration对象中的常量则是明确的 实际 显示方向,共有4中可能:未定义(UNDEFINED) 、横屏 (LANDSCAPE) 、竖屏 (PORTRAIT) 、以及正方形 (SQUARE) 。
最后来看看,如何在程序中捕获显示方向改变的事件,这得从Activity.onConfigurationChanged方法说起。
Android系统会根据设备的配置变化(如屏幕方向的变化)来重新加载不同的资源文件(如 布局 layout资源),它会通过终止并重启Activity来实现 资源 的 重新加载。如果我们向其申明要自己处理(某些) 配置变化,则必须自己负责相关资源的重新加载——也就是说目标Activity不会在 (某些) 配置变化时,再经历 终止并重启的过程了。
我们关注显示方向的变化,需要在Activity申明时指定configChanges属性等于orientation,示例如下:
<activity android:name=".MyActivity" android:configChanges="orientation" android:label="@string/app_name"/>
事实上configChanges属性还有:fontScale(用户首先字体大小改变)、locale(用户的语言环境设定改变)、keyboard(键盘类型改变)等多种可选值 。
然后再覆写 Activity. onConfigurationChanged 方法, 例如:
// 设备配置发生变化时回调 public void onConfigurationChanged(Configuration conf) { //super.onConfigurationChanged(conf); //TODO:YOU Process... }
这样当屏幕方向改变时以上方法会被回调。需要再次强调的是,只有在configChanges中指定的配置项发生变化时才会回调onConfigurationChanged,因此上面的方法仅在屏幕方向(orientation)发生变化时被回调。
发表评论
-
[转]Android设备的屏幕尺寸规格
2011-06-25 14:15 1577[转]Android设备的屏幕尺寸规格 原文: ... -
[转]Android Make脚本简记
2011-06-25 14:11 5306[转]Android Make脚本简记 原文地址: ... -
Android中SQLite操作示例
2011-06-22 10:40 3105Android中SQLite操作示例 在Andro ... -
Mms应用彩信接收过程分析
2011-06-15 16:45 0Mms应用彩信接收过程分 ... -
[转] build/envsetup.sh 脚本简记
2011-05-30 11:14 2649本文转自:http://blogold.c ... -
在Eclipse+ADT中开发Android系统的内置应用
2011-05-19 16:19 2096在Eclipse+ADT中开发Android系统的内置应用 ... -
探究Android中浏览器UA的生成策略
2011-05-05 14:43 3261探究Android中浏览器UA的生成策略 Andr ... -
Android中Adapter、AdapterView的分析及使用
2011-04-27 11:50 0Android中Adapter、AdapterView的分析及 ... -
Android应用APK签名初探
2011-03-08 11:37 0Android应用APK签名初探 需要澄清的概念: ... -
查看栈信息中 .so文件里地址对应的方法名称
2011-02-21 14:54 2748在Android开发中,涉及到JNI时,有时会报告非常底层栈信 ... -
Android源码版本中的tag与分支
2011-08-21 19:12 2971Android源码版本中的tag与分支 ... -
Android的大屏幕
2010-12-17 13:21 0Android的大屏幕 1、需要在AndroidMan ... -
【转】[译]ANDROID Porting系列
2011-08-21 19:11 1437[译]ANDROID Porting系列 一、A ... -
Android中JNI编程的那些事儿
2010-11-26 11:32 8066Android中JNI编程的那些事儿 首先说明,A ... -
Android声音管理方法
2011-08-21 19:10 1948Android声音管理方法 手机都有声音模式,声音 ... -
让Android设备助你进行视频聊天
2010-10-10 14:49 0开源Android视频聊天软件 http://sourcef ... -
再说Android中实现全屏的方法
2010-10-09 17:01 1372Android中实现全屏的方法 实现全屏的方法在网 ... -
【转】Andriod 源码开发,打包so到apk
2011-08-21 18:56 2289命令方式将so文件 打包 ... -
【转】在Android平台实现手机关机的功能
2010-08-27 09:07 0从拥有O1的那天起,就盼望有自动开关机的功能,然而Androi ... -
Android系统Wi-Fi开发API学习笔记
2010-08-25 16:57 0Android系统Wi-Fi开发API学 ...
相关推荐
本文主要对如何控制Android中Activity运行时屏幕方向与显示方式进行详细全面的实例讲解。具有很好的参考价值,需要的朋友一起来看下吧
主要介绍了Android XML設置屏幕方向(android:screenOrientation)详解的相关资料,需要的朋友可以参考下
Android中常用的5大布局方式有以下几种:...线性布局是Android开发中最常见的一种布局方式,它是按照垂直或者水平方向来布局,通过“android:orientation”属性可以设置线性布局的方向。属性值有垂直(vertical)和水平
在本篇文章里小编给各位整理的是关于Android Studio屏幕方向以及UI界面状态的保存代码以及相关知识点,需要的跟着学习下。
5.18 变换屏幕的方向 5.19 获取设备信息 5.20 小结 第6章 手机自动服务 6.1 实现短信提醒 6.2 剩余电量提醒 6.3 短信群发 6.4 短信e-mail通知 6.5 来电提醒 6.5.1 实现原理 6.5.2 telephonymanager和...
Android 里面控制Activity的方向,只要在AndroidManifest.xml里面对应的Activity节点下加一句 android:screenOrientation=”landscape”(landscape是横屏,portrait竖屏)。 我凭这句话混了一年,基本都可以的,...
从事Android开发,免不了会在应用里嵌入一些广告SDK,在嵌入了众多SDK后,发现几乎每个要求在AndroidManifest.xml申明Activity的广告SDK都会要求...在AndroidManifest.xml中添加上诉代码的含义是表示在改变屏幕方向、
5.22 动态更改屏幕方向 5.23 系统设置更改事件 5.24 取得电信网络与手机的相关信息 5.25 建立自己的手写笔画图案 5.26 判断手持设备的WiFi与GPS状态 5.27 手机安全设置管理器 5.28 Shell Script运行Cmmand 5.29 模拟...
在使用画廊视图时,首先需要在屏幕上添加Gallery组件,通常使用标记在XML布局文件中添加。其基本语法如下: Gallery组件支持的XML属性表如下: android:animationDuration 用于设置列表切换时的动画持续时间 ...
5.22 动态更改屏幕方向 5.23 系统设置更改事件 5.24 取得电信网络与手机的相关信息 5.25 建立自己的手写笔画图案 5.26 判断手持设备的WiFi与GPS状态 5.27 手机安全设置管理器 5.28 Shell Script运行Cmmand 5.29 模拟...
5.22 动态更改屏幕方向 5.23 系统设置更改事件 5.24 取得电信网络与手机的相关信息 5.25 建立自己的手写笔画图案 5.26 判断手持设备的WiFi与GPS状态 5.27 手机安全设置管理器 5.28 Shell Script运行Cmmand 5.29 模拟...
5.22 动态更改屏幕方向 5.23 系统设置更改事件 5.24 取得电信网络与手机的相关信息 5.25 建立自己的手写笔画图案 5.26 判断手持设备的WiFi与GPS状态 5.27 手机安全设置管理器 5.28 Shell Script运行Cmmand 5.29 模拟...
一般的我们去切换屏幕方向都是不希望Activity被重新创建,这时就需要对一些属性进行设置,或者使用代码设置。文章通过以上方面解析Activity在横竖屏切换时,生命周期方法执行过程。 1.Activity生命周期 2....
2、讲一下思路,小球由加号位置运动到购物车位置,首先得获得这两个点在整个屏幕中的坐标,然后分别计算这两个点的横纵坐标的差值,再通过TranslateAnimation这个类设置小球在X、Y方向上的偏移量,最后通过...