android:configChanges含义及其用法

本文详细介绍了Android中Activity配置变更的处理方法,包括如何通过设置android:configChanges属性来避免Activity因屏幕旋转等原因而重启,以及如何正确地重写onConfigurationChanged方法来响应这些配置变更。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VALUE                        DESCRIPTION                                                                                                                                                                                      
"mcc"国际移动用户识别码所属国家代号是改变了-----  sim被侦测到了,去更新mcc    mcc是移动用户所属国家代号
"mnc"国际移动用户识别码的移动网号码是改变了------ sim被侦测到了,去更新mnc    MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网
"locale"地址改变了-----用户选择了一个新的语言会显示出来
"touchscreen"触摸屏是改变了------通常是不会发生的
"keyboard"键盘发生了改变----例如用户用了外部的键盘
"keyboardHidden"键盘的可用性发生了改变
"navigation"导航发生了变化-----通常也不会发生
"screenLayout"屏幕的显示发生了变化------不同的显示被激活
"fontScale"字体比例发生了变化----选择了不同的全局字体
"uiMode"用户的模式发生了变化
"orientation"屏幕方向改变了
"screenSize"屏幕大小改变了
"smallestScreenSize"屏幕的物理大小改变了,如:连接到一个外部的屏幕上

android:configChanges

在android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置。在activity加上android:configChanges="keyboardHidden|orientation"属性,就不会重启activity.而只是调用onConfigurationChanged(Configuration newConfig).这样就可以在这个方法里调整显示方式.

[java]  view plain  copy
  1. public void onConfigurationChanged(Configuration newConfig) {    
  2.         try {    
  3.             super.onConfigurationChanged(newConfig);    
  4.             if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {    
  5.                 Log.v("Himi""onConfigurationChanged_ORIENTATION_LANDSCAPE");    
  6.             } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {    
  7.                 Log.v("Himi""onConfigurationChanged_ORIENTATION_PORTRAIT");    
  8.             }    
  9.         } catch (Exception ex) {    
  10.         }    
  11.     }    

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.himi" android:versionCode="1" android:versionName="1.0">  
  4.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  5.         <activity android:name=".MainActivity" android:label="@string/app_name"  
  6.             android:configChanges="keyboardHidden|orientation">  
  7.             <intent-filter>  
  8.                 <action android:name="android.intent.action.MAIN" />  
  9.                 <category android:name="android.intent.category.LAUNCHER" />  
  10.             </intent-filter>  
  11.         </activity>  
  12.     </application>  
  13.     <uses-sdk android:minSdkVersion="4" />  
  14. </manifest> 
  15. 自从Android3.2(API13)后,在设置Activity的android:configChanges="orientation|keyboardHidden"后,还是一样 会重新调用各个生命周期的。因为screen size也开始跟着设备的横竖切换而改变。所以,在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置"orientation", 你还必须设置"screenSize"。
    解决方法:
    AndroidManifest.xml中设置android:configChanges="orientation|screenSize“
  16. 终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~

<think>好的,我现在需要解析用户关于Androidandroid:configChanges属性中orientation、screenSize和keyboardHidden的作用的问题。用户已经提供了一些引用资料,我需要结合这些信息来组织一个清晰准确的回答。 首先,我要明确android:configChanges的作用。这个属性允许开发者指定哪些配置变更由Activity自行处理,避免系统重启Activity。默认情况下,当配置发生变化(如屏幕方向、键盘可用性等),系统会销毁并重建Activity,导致生命周期方法被调用。使用configChanges可以阻止这种默认行为,转而调用onConfigurationChanged方法。 接下来,需要分别解释orientation、screenSize和keyboardHidden这三个值的作用。根据引用[1],从Android 3.2(API 13)开始,屏幕方向的变化同时会引起screenSize的改变。因此,仅设置orientation和keyboardHidden是不够的,必须加上screenSize才能防止Activity重启。引用[3]和[4]提到,设置这些属性后,配置变更时会调用onConfigurationChanged方法,而不是重启Activity。而引用[5]指出,某些情况下如语言设置变更可能仍会导致重启,需要注意其他属性。 然后,需要讨论不同API版本的影响。在API 13之前,orientation和keyboardHidden可能足够,但之后必须包含screenSize。用户提供的代码示例(引用[2]和[4])展示了如何在onConfigurationChanged中处理布局变化,比如切换横竖屏时重新设置ContentView。 还要注意可能的问题,比如部分设备或系统版本的行为差异,或者当其他配置变化未被处理时的情况。比如引用[5]提到的layoutDirection属性在语言变化时的影响,说明需要全面考虑所有相关配置。 最后,总结最佳实践:在API 13及以上,建议使用orientation|screenSize|keyboardHidden的组合,并在onConfigurationChanged中处理相应的变更。同时,注意测试不同设备和版本以确保兼容性。</think>### Androidandroid:configChanges属性解析 `android:configChanges` 属性用于声明哪些配置变更由开发者自行处理,避免系统默认销毁并重建Activity[^1]。以下是对`orientation|screenSize|keyboardHidden`组合的作用解析: --- #### 1. **各参数作用** - **`orientation`** 处理屏幕方向变化(横竖屏切换)。若不配置此参数,屏幕旋转会默认触发Activity重启[^3]。 - **`screenSize`** 从Android 3.2(API 13)开始,屏幕方向变化会同时改变屏幕尺寸(screenSize)。若未包含此参数,即使配置了`orientation`,系统仍可能重启Activity[^1]。 - **`keyboardHidden`** 处理键盘可见性变化(如物理键盘滑动或软键盘弹出/收起)。若未配置此参数,键盘状态变化可能触发Activity重建[^4]。 --- #### 2. **组合使用的必要性** 在API ≥13的设备中,**必须同时设置`orientation|screenSize`**。若仅配置`orientation|keyboardHidden`,系统仍会因`screenSize`变化重启Activity[^1]。 示例声明: ```xml android:configChanges="orientation|screenSize|keyboardHidden" ``` --- #### 3. **生命周期与回调** 配置后: - **Activity不再重启**,而是触发`onConfigurationChanged()`方法。 - 开发者需在此方法中手动处理布局调整,例如: ```java @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { setContentView(R.layout.layout_landscape); // 切换横屏布局 } else { setContentView(R.layout.layout_portrait); // 切换竖屏布局 } } ``` --- #### 4. **注意事项** - **API版本差异**:低于API 13的设备无需`screenSize`,但需考虑兼容性。 - **其他配置变更**:如语言切换(涉及`layoutDirection`)或字体缩放,仍需系统默认处理或额外声明[^5]。 - **部分场景限制**:动态资源加载(如多语言字符串)可能仍需重启Activity生效。 --- #### 5. **典型应用场景** - **游戏界面**:横竖屏切换时保持游戏状态。 - **视频播放器**:旋转屏幕时无缝切换全屏模式。 - **键盘交互**:输入表单避免因软键盘弹出导致界面闪烁。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值