- 浏览: 396977 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
lulu15634219680:
Eclipse设置行宽Maximum line width -
gakes:
有没有正确的啊
Android手机号码判断正则表达式 -
GhostFromheaven:
mooshadow 写道你好,首先感谢你的程序。我最近也碰到了 ...
java合并两个XML文件 -
mooshadow:
你好,首先感谢你的程序。我最近也碰到了这个问题,用了你的程序之 ...
java合并两个XML文件 -
sunnyting:
蛮靠谱!解决问题哈!
Android控制屏幕方向的改变
目前大多数手机都支持 重力感应 ,随之而来的就是屏幕方向改变的问题。很多游戏都是仅横屏展示的,也有一些是仅竖屏展示的,更多的是横屏竖屏都可以的。
对应普通开发者来说,屏幕的随意改变也会带来困扰。在Google自带的doc里可以看到
如果设备的配置(在 Resources.Configuration 中进行了定义)发生改变,那么所有用户界面上的东西都需要进行更新,以适应新的配置。因为 Activity 是与用户交互的最主要的机制,它包含了处理配置改变的专门支持。除非你特殊指定,否则当配置发生改变(比如屏幕方向、语言、输入设备等等的改变)时你当前的 activity 都将被销毁,这销毁是通过一个正常的 activity 生命周期过程( onFreeze(Bundle) , onPause() , onStop() , 和 onDestroy() )进行的。如果 activity 之前正在前景画面,当这个实例的 onDestroy() 调用完成后将会启动这个 activity 的一个新的实例,并将前面那个实例中 onFreeze(Bundle) 所保存的内容传递给新的实例。因为任何的应用资源(包括 layout 文件)都有可能由于任何配置值而改变。因此处理配置改变的唯一安全的方法就是重新获取所有的资源,包括 layout 、绘图资源(原文 drawables )、字符串资源。由于 activity 已经如何保存自己的状态并从这些状态中重建自身,所以 activity 重新启动自身来获得新的配置将是一个非常便利的途径。在一些特殊的情况中,你可能希望当一种或者多种配置改变时避免重新启动你的 activity 。你可以通过在manifest中设置 android:configChanges 属性来实现这点。你可以在这里声明 activity 可以处理的任何配置改变,当这些配置改变时不会重新启动 activity ,而会调用 activity 的 onConfigurationChanged(Resources.Configuration) 方法。如果改变的配置中包含了你所无法处理的配置(在 android:configChanges 并未声明),你的 activity 仍然要被重新启动,而 onConfigurationChanged(Resources.Configuration) 将不会被调用。
在屏幕方向改变的时候,如果没有处理,程序会自动重启。对应一些需要保存用户数据的应用中,必须处理这种情况。
1>在AndroidManifest.xml中设置Activity的android:configChanges 属性。如:
<activity android:name=".AndroidLight"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这样就指定了屏幕方向改变和键盘隐藏时通知程序。
2>在程序中可以添加处理事件
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.d(TAG," == onConfigurationChanged"); processLayout();//自定义函数处理配置改变事件 }
3>也可以在AndroidManifest.xml中设置Activity的android:screenOrientation属性。如
<activity android:name=".AndroidLight" android:label="@string/app_name" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
这样指定屏幕方向为竖屏。屏幕就不会自动旋转了。
4> android:configChanges 可选属性值
Constant |
Value |
Description |
mcc |
0x0001 |
The IMSI MCC has changed, that is a SIM has been detected and updated the Mobile Country Code. |
mnc |
0x0002 |
The IMSI MNC has changed, that is a SIM has been detected and updated the Mobile Network Code. |
locale |
0x0004 |
The locale has changed, that is the user has selected a new language that text should be displayed in. |
touchscreen |
0x0008 |
The touchscreen has changed. Should never normally happen. |
keyboard |
0x0010 |
The keyboard type has changed, for example the user has plugged in an external keyboard. |
keyboardHidden |
0x0020 |
The keyboard or navigation accessibility has changed, for example the user has slid the keyboard out to expose it. Note that despite its name, this applied to any accessibility: keyboard or navigation. |
navigation |
0x0040 |
The navigation type has changed. Should never normally happen. |
orientation |
0x0080 |
The screen orientation has changed, that is the user has rotated the device. |
screenLayout |
0x0100 |
The screen layout has changed. This might be caused by a different display being activated. |
uiMode |
0x0200 |
The global user interface mode has changed. For example, going in or out of car mode, night mode changing, etc. |
fontScale |
0x40000000 |
The font scaling factor has changed, that is the user has selected a new global font size. |
5>android:screenOrientation的可选属性值
Constant Value Description unspecified -1 No preference specified: let the system decide the best orientation. This will either be the orientation selected by the activity below, or the user's preferred orientation if this activity is the bottom of a task. If the user explicitly turned off sensor based orientation through settings sensor based device rotation will be ignored. If not by default sensor based orientation will be taken into account and the orientation will changed based on how the user rotates the device landscape 0 Would like to have the screen in a landscape orientation: that is, with the display wider than it is tall, ignoring sensor data. portrait 1 Would like to have the screen in a portrait orientation: that is, with the display taller than it is wide, ignoring sensor data. user 2 Use the user's current preferred orientation of the handset. behind 3 Keep the screen in the same orientation as whatever is behind this activity. sensor 4 Orientation is determined by a physical orientation sensor: the display will rotate based on how the user moves the device. nosensor 5 Always ignore orientation determined by orientation sensor: the display will not rotate when the user moves the device. sensorLandscape 6 Would like to have the screen in landscape orientation, but can use the sensor to change which direction the screen is facing. sensorPortait 7 Would like to have the screen in portrait orientation, but can use the sensor to change which direction the screen is facing. reverseLandscape 8 Would like to have the screen in landscape orientation, turned in the opposite direction from normal landscape. reversePortait 9 Would like to have the screen in portrait orientation, turned in the opposite direction from normal portrait. fullSensor 10 Orientation is determined by a physical orientation sensor: the display will rotate based on how the user moves the device. This allows any of the 4 possible rotations, regardless of what the device will normally do (for example some devices won't normally use 180 degree rotation).
发表评论
-
Android获取sdcard信息
2011-04-04 22:11 40351>实例代码: if (Environ ... -
Android获取通话状态
2011-04-04 21:08 73271>添加读取手机状态的权限 <uses-pe ... -
Android 系统服务getSystemService
2011-04-02 21:04 3823public Object getSystemService ... -
Android获取SIM卡信息--TelephonyManager
2011-04-02 19:37 83621>获得TelephonyManager Telepho ... -
Android获取、设置Wifi状态
2011-04-02 19:14 54411>获得WifiManager WifiManager ... -
Android获取、设置桌面
2011-04-02 18:57 15311>添加权限 <uses-permission ... -
Android SQLite学习工具
2011-03-27 19:01 1253Android自带数据库SQLite,是一个超级迷你,但是五脏 ... -
自定义程序实现Android EditText只允许输入指定字符
2011-03-24 19:18 7310程序设计的很多地方都要用到一个小技术:指定文本框的输入类型。即 ... -
Android EditText禁止输入中文字符
2011-03-24 16:51 27392只允许EditText输入数字或者email格式字符是非常简 ... -
Android 自定义拨打电话程序段
2011-03-17 14:09 1991strInput = "13912345 ... -
java合并两个XML文件
2010-09-13 15:59 9994package cs.edu.hust.cs.j2 ... -
sss
2010-09-09 12:09 0getWindow().setFlags(WindowMana ... -
android 邮件地址正则表达式
2010-09-07 20:24 1899public static boolean isEma ... -
正则表达式需要转义的字符
2010-09-07 20:08 8306$ ---> \$ ( ---> \ ... -
Android手机号码判断正则表达式
2010-09-07 19:26 10008public static boolean isPho ... -
Android发送短信与邮件
2010-09-07 19:14 3172发送短信: 注意引入包的时候,应该是: import andr ... -
Android TabHost动态加载内容总结
2010-09-02 16:16 5812前面用继承TabActivity的方法很好的完成了,TabHo ... -
Android TabHost使用、动态加载内容
2010-09-02 16:03 7640使用TabHost有两种办法 1.在layout的xml文件里 ... -
Android Activity间传递对象startActivityForResult、onActivityResult、setResult总结
2010-09-01 13:12 4869前面做了在Activity之间传递参数的测试。 setResu ... -
Android Activity间传递自定义类的对象
2010-09-01 12:53 13664有很多时候都需要在不同的Activity之间传递数据。 实现方 ...
相关推荐
Android 屏幕旋转实例,改变屏幕方向,这个和平时的锁定屏幕方向有关联,其基本的实现思路如下: public void onConfigurationChanged(Configuration newConfig) { Toast.makeText(this, "系统的屏幕方向发生...
本文将深入探讨Android系统中如何管理和控制屏幕方向。 首先,屏幕方向的设置主要针对`Activity`,开发者通常会在`AndroidManifest.xml`文件中,通过`<activity>`标签的`screenOrientation`属性来指定。例如: ```...
本篇文章将深入探讨如何控制Android Activity的屏幕方向,实现始终横屏、全屏显示以及如何处理屏幕方向改变时Activity的销毁与重建问题。 1. **屏幕始终横屏或竖屏** 在AndroidManifest.xml中,我们可以为特定的...
4. **处理配置变更**:当屏幕方向改变时,Android可能会销毁并重建活动。为了防止数据丢失,可以重写`onSaveInstanceState()`来保存状态,并在`onCreate()`或`onRestoreInstanceState()`中恢复。 5. **权限检查**:...
通过滑动屏幕,你可以看到箭头根据手指移动的方向变化。这种自定义控件的实现方式为开发者提供了更大的灵活性,可以根据项目需求进一步扩展功能,如添加动画效果、触摸反馈等。 总之,创建一个自定义的圆盘方向按钮...
6. **处理配置更改**:在AndroidManifest.xml中,可以通过在标签内添加`android:configChanges="orientation|screenSize"`来防止Activity因屏幕方向改变而被销毁重建。这时,你需要重写`onConfigurationChanged...
通过指定`orientation`,当屏幕方向改变时,系统会调用`onConfigurationChanged`而不是销毁并重建活动。 总的来说,这个压缩包提供的资源可以帮助开发者学习如何在Android应用中实现屏幕方向锁定功能,避免不必要的...
然而,单纯的屏幕方向改变可能导致`onCreate()`方法被多次调用,这在某些情况下会导致不必要的资源重新加载或状态丢失,影响应用性能和用户体验。 #### 四、解决屏幕翻转带来的问题 为了避免屏幕翻转过程中`...
在Android开发中,实现“滑动屏幕改变颜色”的功能涉及到多个关键知识点,这些知识点涵盖了触摸事件处理、颜色操作以及UI控件的交互。下面将详细阐述这些内容。 1. 触摸事件处理: Android系统提供了多种事件监听...
3. **重写Activity的onConfigurationChanged()**:为了在屏幕方向改变时不重新创建Activity,需要在AndroidManifest.xml中对应的Activity标签中添加`android:configChanges="orientation|screenSize"`,然后在...
默认情况下,Android会在屏幕方向改变时销毁并重新创建Activity。为了避免这种情况,我们可以在`AndroidManifest.xml`中指定Activity处理方向变化,而不让系统自动处理: ```xml android:name=".YourActivity" ...
【用于Android设备默认屏幕方向自适应的电路的制作方法】 ...这种自适应电路的实施方式是通过跳帽的连接状态改变电路的电平输出,从而指示屏幕的方向,实现了硬件层面的屏幕方向识别,极大地优化了生产流程和用户体验。
5. **资源的加载**:除了布局,其他资源如图片、字符串等也可能需要根据屏幕方向改变。Android系统会自动加载与当前方向匹配的资源,开发者只需在res目录下按方向创建子目录,如drawable-land和drawable-port。 6. ...
总结来说,"ScreenRotationDemo"是一个展示Android屏幕旋转处理的实例项目,涵盖了从XML配置到Java代码的处理方法,以及如何创建适应不同屏幕方向的布局。开发者可以通过这个示例学习到如何优雅地处理Android应用在...
- 屏幕方向的改变通常会导致Activity的重新创建。 - 为了避免数据丢失,开发者需要在Activity的生命周期方法中保存和恢复状态。 - 例如,可以使用`onSaveInstanceState`方法保存状态,在`onCreate`方法中恢复状态...
当设备的方向改变时,系统会触发一个屏幕旋转事件,并根据当前的屏幕方向和应用的配置更新UI布局。Android系统提供两种主要的屏幕方向: portrait(竖屏)和landscape(横屏),并且支持sensorLandscape和...
### 解决Android手机屏幕横竖屏切换问题 在Android应用开发中,屏幕方向的变化是一个常见的需求,也是开发者经常需要处理的...通过以上方法,开发者可以灵活地控制Android应用中的屏幕方向变化,提供更好的用户体验。
在Android开发中,改变...总的来说,Android系统提供了丰富的API和机制来处理屏幕方向的改变。开发者可以根据需要选择合适的方式,为用户提供最佳的界面体验。以上就是Android改变手机屏幕朝向的方法及其相关的技巧。
当我们谈论“Android屏幕旋转适配”,主要是指如何使应用在不同屏幕方向(横屏或竖屏)下保持良好的用户体验和功能完整性。 Activity是Android应用程序中的基本单元,它负责处理用户交互和显示UI。当屏幕旋转时,...