【问题标题】:Avoid setRequestedOrientation delay避免 setRequestedOrientation 延迟
【发布时间】:2021-12-18 20:12:07
【问题描述】:

在尝试设置我的活动方向时,我遇到了一个不受欢迎的小影响:

我有两个活动:MainActivity 和 Activity2。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button).setOnClickListener(v -> startActivity(new Intent(this, Activity2.class)));
    }
}

public class Activity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }
}

当我单击设备纵向的按钮(但以横向显示 MainActivity)时,它会以纵向加载 Activity2,并需要大约 1 秒才能旋转到横向。

如何避免这种情况并从一开始就以正确的方向加载 Activity2?

注意:这是一个简化的示例。无法在清单中设置方向,因为方向不是固定的并且取决于用户输入。

【问题讨论】:

  • 整个Activity应该被销毁并从头开始重新创建,所以延迟不能再降低了。
  • 这是一种罕见的行为,如果 MainActivity 不请求方向,则第二个 Activity 会立即在横向中直接加载。
  • @Addev Activity2 是否总是与 MainActivity 相同的方向?如果是这种情况,您可以使用 android:screenOrientation="locked" 到 Activity2 清单,它将方向锁定为其当前旋转(与 MainActivity 相同)。

标签: java android kotlin android-intent android-orientation


【解决方案1】:

找到了一种避免视觉效果的方法,但它并不优雅。

通过声明

public class Activity2 extends AppCompatActivity {
   ...
}
public class Activity2Land extends Activity2 {
   ...
}

在清单中

    <activity
        android:name=".Activity2"
        android:screenOrientation="portrait"
        android:exported="false" />
    <activity
        android:name=".Activity2Land"
        android:screenOrientation="landscape"
        android:exported="false" />

您可以解决此问题。但是,是的,如果你想支持反向和传感器方向,你需要声明很多活动。

有什么想法可以正确解决这个问题吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    相关资源
    最近更新 更多