关于android:configChanges的属性

本文详细解释了Android应用中Activity在设备配置变化时的行为,包括配置保存、销毁与重建的过程,并介绍了如何使用android:configChanges属性来优化应用在不同设备状态变化时的表现。通过设置该属性,开发者能够使Activity在特定配置变化时调用onConfigurationChanged()方法,从而避免不必要的重启,提升用户体验。
摘要由CSDN通过智能技术生成

程序在运行时,一些设备的配置可能会改变,如:横竖屏的切换、键盘的可用性等,这样的事情一发生,Activity会重新启动,其中的过程是:在销毁之前会先 called  onSaveInstanceState()去保存你应用中的一些数据,然后called onDestroy(),最后才去called onCreate()或onRestoreInstanceState()方法去重新启动Activity。 

android:configChanges的属性:当指定的属性发生变化时,不会去重新启动Activity,而是通知程序去调用 onConfigurationChanged()函数 例如:在进行横竖屏的切换时,会重新启动Activity,而定义了这个属性,就不会重新启动Activity了,而是去调用 onConfigurationChanged()函数 
可以设置多个属性,中间用|隔开 。

VALUE                                     DESCRIPTION
"mcc"  国际移动用户识别码所属国家代号是改变了-----  sim被侦测到了,去更新mcc    mcc是移动用户所属国家代号 
"mnc" 国际移动用户识别码的移动网号码是改变了------ sim被侦测到了,去更新mnc    MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网 

"locale" 地址改变了-----用户选择了一个新的语言会显示出来 
"touchscreen" 触摸屏是改变了------通常是不会发生的 
"keyboard" 键盘发生了改变----例如用户用了外部的键盘 
"keyboardHidden" 键盘的可用性发生了改变 
"navigation" 导航发生了变化-----通常也不会发生 
"screenLayout" 屏幕的显示发生了变化------不同的显示被激活 
"fontScale" 字体比例发生了变化----选择了不同的全局字体 
"uiMode" 用户的模式发生了变化 
"orientation" 屏幕方向改变了 
"screenSize" 屏幕大小改变了 
"smallestScreenSize" 屏幕的物理大小改变了,如:连接到一个外部的屏幕上


例子:在Activity中添加了 android:configChanges属性,目的是当所指定属性(Configuration Changes)发生改变时,通知程序调用 onConfigurationChanged()函数。 AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.test"
        android:versionCode="1"
        android:versionName="1.0">
      <uses-sdk android:minSdkVersion="8" />

      <application android:icon="@drawable/icon" android:label="@string/app_name">
          <activity android:name=".TestActivity"
                    android:label="@string/app_name"
                    android:configChanges="keyboardHidden|orientation">
              <intent-filter>
                  <action android:name="android.intent.action.MAIN" />
                  <category android:name="android.intent.category.LAUNCHER" />
              </intent-filter>
          </activity>

      </application>
  </manifest>

main.xml文件

  <?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"
      >
      <TextView  
          android:id="@+id/tv"
          android:layout_width="fill_parent" 
          android:layout_height="wrap_content" 
          android:text="横竖屏切换测试"
          />
      <EditText 
          android:layout_width="fill_parent" 
          android:layout_height="wrap_content" 
          android:id="@+id/et"
          />
  </LinearLayout>

  TestActivity.java文件

  package com.test;

  import android.app.Activity;
  import android.content.res.Configuration;
  import android.os.Bundle;
  import android.widget.EditText;
  import android.widget.TextView;

  public class TestActivity extends Activity {
      EditText et;
      TextView tv;
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          et = (EditText) findViewById(R.id.et);
          tv = (TextView) findViewById(R.id.tv);
          System.out.println("我是onCreate方法");
      }


      @Override
      public void onConfigurationChanged(Configuration newConfig) {
          super.onConfigurationChanged(newConfig);

//添加代码/

          if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
              tv.setText("横屏");
          }else{
              tv.setText("竖屏");
          }
      }
  }

通过设置这个属性可以使Activity捕捉设备状态变化,以下是可以被识别的内容:  
CONFIG_FONT_SCALE
CONFIG_MCC
CONFIG_MNC
CONFIG_LOCALE
CONFIG_TOUCHSCREEN
CONFIG_KEYBOARD
CONFIG_NAVIGATION
CONFIG_ORIENTATION


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值