为什么将屏幕快速旋转180度不算作配置更改,因此它不会触发Activity.onCreate()
!所以我无法调整我的相机视图!如果旋转90度,则每次触发配置更改。
我省略了源代码,因为我的清单中没有configChanges
也没有orientation
属性。活动也没什么特别的。这似乎是一种预期的行为,但我找不到任何官方信息。
设备:硬件Nexus 5X
平台:Android 7.1.1
清单:
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="false"
android:xlargeScreens="true" />
<application
android:name="xyz.MyApp"
android:allowBackup="true"
android:backupAgent=".provider.MyBackupAgent"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:restoreAnyVersion="true"
android:theme="@style/AppTheme"
android:uiOptions="splitActionBarWhenNarrow"
tools:replace="android:icon" >
<activity android:name="xyz.MyActivity"
android:label="asdf"
android:theme="@style/Theme" />
styles.xml:
<style name="Theme" parent="Theme.AppCompat.NoActionBar">
<item name="actionBarIconColor">#fff</item>
<item name="actionBarInsetStart">@dimen/keyline_2</item>
</style>
样式-v19.xml:
<style name="Theme" parent="Theme.AppCompat.NoActionBar">
<item name="actionBarIconColor">#fff</item>
<item name="actionBarInsetStart">@dimen/keyline_2</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
答案 0 :(得分:3)
您应在android:screenOrientation="fullSensor"
为您的活动指定AndroidManifest.xml
如上所述,here默认方向为sensor
,忽略了反向纵向方向。 fullSensor
允许所有4个方向
更新:上述答案无法解决问题。核心问题是将方向改变180度(即从横向到反向横向)不会触发重建活动。这是预期的行为。通常情况下,横向布局与反向横向布局没有区别。 如果您想在旋转180后更改部分视图,可以使用OrientationEventListener
样品:
final WindowManager mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
OrientationEventListener orientationEventListener = new OrientationEventListener(this,
SensorManager.SENSOR_DELAY_NORMAL) {
@Override
public void onOrientationChanged(int orientation) {
if (orientation == ORIENTATION_UNKNOWN) {
return;
}
Display display = mWindowManager.getDefaultDisplay();
int rotation = display.getRotation();
if (rotation != mLastRotation) {
// do something with your views
mLastRotation = rotation;
}
}
};
if (orientationEventListener.canDetectOrientation()) {
orientationEventListener.enable();
}
如果你的minSdk是17岁以上,你也可以使用DisplayListener#onDisplayChanged回调
答案 1 :(得分:0)
请在AndroidManifest
文件中使用它:
android:screenOrientation="sensorLandscape"