为何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
相关产品推荐
相关产品推荐

