android Configuration详解

configuration


一、设置Android的硬件环境监听:

  1. <activity  
  2.             android:configChanges="orientation"  
  3.             android:name=".MainActivity"  
  4.             android:label="@string/title_activity_main" >  
  5.             <intent-filter>  
  6.                 <action android:name="android.intent.action.MAIN" />  
  7.                 <category android:name="android.intent.category.LAUNCHER" />  
  8.             </intent-filter>  
  9.         </activity>  

在需要监控的activity中的标签写下的方法用户监听标签
  1. android:configChanges="orientation"  

在activity中实现一下方法:

  1. @Override  
  2.     public void onConfigurationChanged(Configuration newConfig)  
  3.     {  
  4.         super.onConfigurationChanged(newConfig);  
  5.         // 用户配置修改的时候  
  6.         if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)  
  7.         {  
  8.             //在横屏的情况下,跳转  
  9.             textView.setText("ORIENTATION_LANDSCAPE " + System.currentTimeMillis());  
  10.         }  
  11.         else if( newConfig.orientation == Configuration.ORIENTATION_PORTRAIT )  
  12.         {  
  13.             //在竖直情况下,跳转  
  14.             textView.setText("ORIENTATION_PORTRAIT" + System.currentTimeMillis());  
  15.         }  
  16.         else if( newConfig.orientation == Configuration.ORIENTATION_SQUARE )  
  17.         {  
  18.             textView.setText("ORIENTATION_SQUARE " + System.currentTimeMillis());  
  19.         }  
  20.         else if( newConfig.orientation == Configuration.ORIENTATION_UNDEFINED )  
  21.         {  
  22.             textView.setText("ORIENTATION_UNDEFINED " + System.currentTimeMillis());  
  23.         }  
  24.     }  

同这用就可以当屏幕的有横屏竖屏之间的转化,就有相关的事件触发。

注意哟:当这些事件发生之后,并不会对activiyt的生命周期有影响的,也就是说当横竖修改之后,android并不会有任何生命周期的变化

同理还有(键盘显示或者隐藏、用户的语言设置、用户字体修改、对键盘类型修改、键盘导航修改)这些都可以触发相关的activity的事件产生。


二、对android固定设置格式

  1. <activity  
  2.           android:screenOrientation="landscape"  
  3.           android:name=".MainActivity"  
  4.           android:label="@string/title_activity_main" >  
  5.           <intent-filter>  
  6.               <action android:name="android.intent.action.MAIN" />  
  7.               <category android:name="android.intent.category.LAUNCHER" />  
  8.           </intent-filter>  
  9.       </activity>  


设置手机界面的显示方式为横屏而且不会变化。。。。



以下是网上良好的应用程序配置的说明:

Android通过终止、重启应用程序来重新加载资源文件,以做到对语言、区域和硬件实时变化的支持。它的默认的行为不是总是方便和令人满意的,尤其当配置变化(如屏幕方向和键盘可视)、用户旋转设备或划出键盘等。你可以通过监测和响应定制你的应用程序来对这些变化作出响应。

为了能让Activity能监听实时的配置变化,需要在manifest节点里添加“android:configChanges”特性,指定你要处理的配置变化事件。接下来的列表给出了你可以指定的配置变化的事件值:

❑ orientation 屏幕在纵向和横向间旋转。

❑ keyboardHidden 键盘显示或隐藏。

❑ fontScale 用户变更了首选的字体大小。

❑ locale 用户选择了不同的语言设定。

❑ keyboard 键盘类型变更,例如手机从12键盘切换到全键盘

❑ touchscreen或navigation 键盘或导航方式变化,一般不会发生这样的事件。

你可以选择捕获多个事件,通过在各事件值间使用“|”。接下来的代码片段显示了Activity要捕获屏幕方向和键盘可视的事件:增加这个特性就会强制应用程序在指定的配置变化时不用再重新启动,而是触发Activity中的onConfigurationChanged方法。

如下面的代码片段所示,override这个方法去捕获配置变化,通过传入的Configuration 对象的值进行合适的处理。需要提醒的是需要调用父类的方法,并且要重新加载Activity使用的资源,以防有变更。

@Overridepublic void onConfigurationChanged(Configuration _newConfig) {

super.onConfigurationChanged(_newConfig);

[ ... 基于资源值更新UI ... ]

if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

[ ... 对不同的屏幕方向作出处理 ... ]

}

if (_newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) {

[ ... 对键盘可见作出处理 ... ]

}

}

当onConfigurationChanged 被调用时,Activity的资源变量都已经用新的值进行了更新,所以它们是安全的。任何你没有显式指明的配置变化事件,都将由应用程序捕获,而且仍然会引起应用程序的重启,而不会调用onConfigurationChanged 方法。



// --------

Configuration 类中包含了很多种信息,例如系统字体大小,orientation,输入设备类型等等.

fontScale -- 来源于system.prop中 sys.font.scale配置项

输入设备类型配置:系统加入的任何输入device必须拥有输入属性:现在android中仅支持touchscreen(触摸),keyboard(键盘),navigation(滚动球)

orientation -- 屏幕方位

keyboardHidden -- 如果是划盖或开盖手机并且没有软键盘支持,这个设成true

hardKeyboardHidden -- 如果是划盖或开盖手机,这个设成true

locale -- 用户选择的location信息

theme -- 皮肤,资源等等

 

当Configuration改变后,ActivityManagerService将会发送"配置改变"的广播,会要求ActivityThread 重新启动当前focus的Activity.



// 这里还有一个不错的实例。

http://www.mobiletrain.org/lecture/doc/android/2011-07/625.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值