You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

横竖屏切换不重建Activity,如何刷新布局加载对应字符串资源?

解决横竖屏切换时手动刷新资源的问题

你遇到的问题很典型——因为你通过android:configChanges阻止了Activity重建,系统不会自动帮你加载新配置下的资源(比如横竖屏对应的字符串),所以得手动触发资源更新和布局刷新。下面是具体的解决方案:

步骤1:重写onConfigurationChanged方法

当屏幕旋转时,系统会调用这个方法(因为你已经声明了监听orientation|screenSize等配置变化)。我们需要在这里处理资源更新和布局刷新:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    
    // 1. 更新资源配置,让当前Activity使用新的配置资源
    getResources().updateConfiguration(newConfig, getResources().getDisplayMetrics());
    
    // 2. 刷新布局,加载新的字符串资源
    refreshUI();
}

步骤2:实现refreshUI方法刷新界面

这里有两种常用方案,根据你的场景选择:

方案A:重新加载整个布局(适合复杂界面)

如果你的布局控件较多,直接重新加载布局是最省心的方式,但要注意重新绑定控件的监听事件:

private void refreshUI() {
    // 重新加载布局
    setContentView(R.layout.activity_a);
    
    // 重新绑定控件和事件(比如按钮点击、列表适配器等)
    TextView targetTextView = findViewById(R.id.your_text_view_id);
    // 这里可以重新设置其他控件的状态或事件
}

方案B:单独更新需要变化的控件(适合简单界面)

如果只有少数控件需要更新(比如你提到的TextView),直接单独更新更高效:

private void refreshUI() {
    TextView targetTextView = findViewById(R.id.your_text_view_id);
    // 重新获取对应配置下的字符串资源并设置
    targetTextView.setText(getString(R.string.your_shared_string_key));
}

额外注意事项

  • 关于updateConfiguration的兼容性:这个方法在API 25之后被标记为Deprecated,但在大多数场景下仍然可以正常工作。如果你需要适配更高版本,可以考虑使用createConfigurationContext创建新的上下文来获取资源,但实现会更复杂一些。
  • 确认AndroidManifest中的配置:确保你已经正确声明了android:configChanges="keyboardHidden|orientation|screenSize",否则onConfigurationChanged不会被触发。

这样处理后,当用户旋转屏幕时,你的TextView就能加载对应横竖屏的字符串资源了。

内容的提问来源于stack exchange,提问作者toffor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:21:13