Android的Configuration类

来源:互联网 发布:淘宝店铺转让风险 编辑:程序博客网 时间:2024/06/02 00:24
1.Configuration类专门用来描述Android设备的配置信息。

2.获得Configuration类对象
Configuration config = getResources().getConfiguration();

3.各种属性介绍
(1)fontScale:字体的缩放因子
(2)keyboard:键盘类型
(3)keyboardHidden:键盘是否可用,true为不可用,false为可用。当所有的键盘(软键盘&硬件键盘)都不可用才返回true。
(4)locale:语言(本地环境)。具体的要靠理解。setting中设置语言会导致local改变。
(5)mcc:国家码
(6)mnc:网络码
(7)navigation:导航类型
(8)orientation:屏幕方向
(9)touchscreen:触摸方式

4.使用实例获得各种属性
public class MainActivity extends Activity {private TextView fontScaleTv = null;private TextView keyboardTv = null;private TextView keyboardHiddenTv = null;private TextView localeTv = null;private TextView mccTv = null;private TextView mncTv = null;private TextView navigationTv = null;private TextView orientationTv = null;private TextView touchscreenTv = null;private Button changeOrientation = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.d("zmq", "MainActivty onCreate");findView();Configuration config = getResources().getConfiguration();fontScaleTv.setText("字体缩放:" + config.fontScale);keyboardTv.setText("键盘:" + config.keyboard);keyboardHiddenTv.setText("键盘是否可用:" + config.keyboardHidden);localeTv.setText("语言:" + config.locale);mccTv.setText("国家码:" + config.mcc);mncTv.setText("网络码:" + config.mnc);navigationTv.setText("导航类型:" + config.navigation);orientationTv.setText("屏幕方向:" + config.orientation);touchscreenTv.setText("触摸方式:" + config.touchscreen);}private void findView() {fontScaleTv = (TextView) findViewById(R.id.fontScaleTv);keyboardTv = (TextView) findViewById(R.id.keyboardTv);keyboardHiddenTv = (TextView) findViewById(R.id.keyboardHiddenTv);localeTv = (TextView) findViewById(R.id.localeTv);mccTv = (TextView) findViewById(R.id.mccTv);mncTv = (TextView) findViewById(R.id.mncTv);navigationTv = (TextView) findViewById(R.id.navigationTv);orientationTv = (TextView) findViewById(R.id.orientationTv);touchscreenTv = (TextView) findViewById(R.id.touchscreenTv);changeOrientation = (Button) findViewById(R.id.changeOrientation);changeOrientation.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {// TODO Auto-generated method stub// get Configuration infoConfiguration config = getResources().getConfiguration();Log.d("zmq", "orientation=" + config.orientation);// current orientation is LANDSCAPE,then set to PORTRAITif (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {Log.d("zmq", "change LANDSCAPE to PORTRAIT");MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);}// current orientation is PORTRAIT,then set to LANDSCAPEelse if (config.orientation == Configuration.ORIENTATION_PORTRAIT) {Log.d("zmq", "change PORTRAIT to LANDSCAPE");MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);}}});}@Overridepublic void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);String orientation = newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ? "横屏": "竖屏";Toast.makeText(MainActivity.this, "orientation", Toast.LENGTH_SHORT).show();}}
<activity            android:name="com.zmq.configuration.MainActivity"            android:label="@string/app_name"             android:configChanges="orientation">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>
当改变orientation的时候,会触发onConfigurationChanged函数运行(在Android中配置configChanges属性,如果没有配置这个属性,不会触发onConfigurationChanged函数运行)。(系统属性变化时,会触发此函数回调)

点击按钮:


会重新跑onCreate函数:

5.在各个属性改变的时候,会重新跑Activity的生命周期函数,即Activity会重新启动。
要想使Activity 不重新启动,则需要:
在Manifest文件中,使用android:configChanges属性,并且可以在Activity中重写onConfigurationChanged()方法。
例如,改变orientation:
<activity            android:name="com.zmq.configuration.MainActivity"            android:label="@string/app_name"             android:configChanges="orientation|screenSize">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>
@Overridepublic void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);Log.d("zmq", "onConfigurationChanged");String orientation = newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ? "横屏": "竖屏";Toast.makeText(MainActivity.this, "orientation:"+orientation, Toast.LENGTH_SHORT).show();}

主意:在configChanges属性中,需要加上screenSize,否则还是会重启Activity。
locale的时候要加上layoutDirection。






0 0