gpt4 book ai didi

android - 为什么屏幕旋转 180 度不算作配置更改?

转载 作者:搜寻专家 更新时间:2023-11-01 08:29:37 25 4
gpt4 key购买 nike

为什么屏幕快速旋转 180 度不算作配置更改,因此它不会触发 Activity.onCreate() !?所以我不能重新调整我的相机 View !如果旋转 90 度,每次都会触发配置更改。我将省略源代码,因为我的 list 没有 configChanges 也没有 orientation 属性。 Activity 也没什么特别的。这似乎是一种预期的行为,但我没有找到任何官方信息。

设备:硬件 Nexus 5X

平台:Android 7.1.1

list :

<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" />

样式.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>

最佳答案

您应该在 AndroidManifest.xml 中为您的 Activity 指定 android:screenOrientation="fullSensor"如所述here默认方向是 sensor 忽略反向纵向方向。 fullSensor 允许所有 4 个方向

更新:上面的回答没有解决问题。核心问题是将方向改变 180 度(即从横向到反向横向)不会触发 Activity 重新创建。这是预期的行为。通常情况下,横向布局与反向横向布局没有区别。如果您想在旋转 180 度后更改某些 View ,可以使用 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回调

关于android - 为什么屏幕旋转 180 度不算作配置更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41898607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com