android:configChanges=”orientation|screenSize|keyboardHidden”
时间: 2025-06-28 17:03:16 浏览: 54
### 处理 Android 应用中的配置变化
#### 配置 `android:configChanges` 属性
为了防止因设备旋转或其他配置更改而导致 Activity 被销毁并重建,可以在清单文件中为特定的 Activity 设置 `android:configChanges` 属性。这允许应用程序自行处理这些变更而不必经历完整的生命周期重启过程。
对于方向(`orientation`)、屏幕尺寸(`screenSize`)以及软键盘状态(`keyboardHidden`)的变化,推荐的做法是在 `<activity>` 标签内指定相应的值:
```xml
<activity
android:name=".YourActivity"
android:configChanges="orientation|keyboardHidden|screenSize">
</activity>
```
当设置了上述参数之后,如果发生任何提及到的方向改变或是虚拟键盘弹出/收起的情况时,系统将不再自动销毁当前界面而是仅触发 `onConfigurationChanged()` 方法[^2]。
#### 实现 `onConfigurationChanged()`
一旦指定了 `android:configChanges` 来拦截某些类型的配置变动,则需要重写该 Activity 的 `onConfigurationChanged(Configuration)` 函数以便能够响应这类事件的发生。下面是一个简单的例子展示了如何实现这一点:
```java
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// 检查新的配置信息以决定采取什么行动
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
Log.d("TAG", "Landscape mode");
// 执行针对横向布局的操作...
}else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Log.d("TAG", "Portrait mode");
// 执行针对纵向布局的操作...
}
}
```
通过这种方式可以更灵活地控制 UI 行为,并且避免不必要的资源消耗和用户体验上的中断。
#### 最佳实践建议
- **谨慎使用**:虽然可以通过设置 `android:configChanges` 来阻止默认行为,但这并不总是最佳解决方案。有时让框架管理整个流程反而更加简单可靠。
- **性能考虑**:手动接管配置更改意味着开发者有责任确保所有必要的组件都能正确适应新环境;因此务必仔细测试不同场景下的表现。
- **兼容性问题**:不同的 API 版本可能有不同的默认行为模式,所以在开发过程中应该关注目标平台版本的要求,并适当调整策略[^1]。
阅读全文
相关推荐



















