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

为何onConfigurationChanged无法检测Android设备的屏幕旋转?

屏幕旋转检测问题:onConfigurationChanged未触发

你在Android 12的Pixel 3设备上尝试通过onConfigurationChanged检测屏幕旋转,但未触发Toast提示和日志输出,问题出在**android:configChanges的参数配置不全**。

你的原代码

Activity代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Toast.makeText(getApplicationContext(), "Screen is rotated!", Toast.LENGTH_SHORT).show();
        Log.i("ROTATEAPP", "Screen is rotated...");
    }
}

AndroidManifest.xml代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.ScreenRotate"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:configChanges="orientation"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <meta-data
                android:name="android.app.lib_name"
                android:value="" />
        </activity>
    </application>

</manifest>

问题原因

从Android 3.2(API 13)开始,屏幕旋转时系统不仅会改变orientation配置,还会触发screenSize和smallestScreenSize的配置变化。到Android 12,这个逻辑依然生效——如果configChanges只声明orientation,系统会判定你未处理完整的配置变更,依然会销毁并重建Activity,不会调用onConfigurationChanged方法。

解决方案

修改AndroidManifest.xml中Activity的android:configChanges属性,补充screenSize和smallestScreenSize参数:

<activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize|smallestScreenSize"
    android:exported="true">
    <!-- 其他配置保持不变 -->
</activity>

修改后重新运行应用,旋转屏幕时即可正常触发onConfigurationChanged,看到Toast提示和日志输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:50:24