【问题标题】:How to detect orientation changes but letting android handle them?如何检测方向变化但让android处理它们?
【发布时间】:2016-08-17 09:56:35
【问题描述】:

我有一个与此非常相似的问题:Android - ActionBar not resizing with onConfigurationChanged ( AppCompat )

我需要让 android 处理方向变化,因为我想重新创建活动。

而且,我还需要检测何时产生了方向变化。

这两种综合需求能同时满足吗?

【问题讨论】:

    标签: android screen-orientation android-lifecycle oncreate android-orientation


    【解决方案1】:

    检测 Activity 的旋转而不干扰其路线,您可以执行以下操作:

    @Override
    public void onConfigurationChanged(Configuration config) {
        super.onConfigurationChanged(config);
        // Check for the rotation
        if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Toast.makeText(this, "LANDSCAPE", Toast.LENGTH_SHORT).show();
        } else if (config.orientation == Configuration.ORIENTATION_PORTRAIT){
            Toast.makeText(this, "PORTRAIT", Toast.LENGTH_SHORT).show();
        }
    }
    

    此外,您需要确保,在您的清单中,您的活动允许 configChanges 进行轮换

    <activity android:name=".MyActivity"
              android:configChanges="orientation|keyboardHidden"
              android:label="@string/app_name">
    

    重要提示:从 Android 3.2 起(API 13+),当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。 如果您想在针对特定 API 级别 (13+) 进行开发时防止由于方向更改而导致运行时重新启动,请务必声明:android:configChanges="orientation|screenSize"

    -- // --

    编辑

    使用configChanges 属性,配置更改时不会重新创建您的活动

    More can be found on Google's Documentation here

    android:configChanges

    列出活动将自行处理的配置更改。什么时候 运行时发生配置更改,活动被关闭 并默认重新启动,但使用此声明配置 属性将阻止活动重新启动。相反, 活动保持运行,其 onConfigurationChanged() 方法是 调用。

    你可以用一个flag来控制旋转,如果onConfigurationChanged()被调用,你可以自己调用Activity的onCreate()。如果没有,onCreate() 将仅在第一次实例化 Activity 时调用

    【讨论】:

    • 请阅读我的问题。我需要由android处理活动更改。我想你不明白我的问题
    • #1 “我需要让 android 处理方向变化,因为我想重新创建活动。” - 通过调用 onConfigurationChanged 并将配置传递给 super() 构造函数,您不会阻止 android 处理方向更改。它仍然会处理它。 #2 “而且,我需要检测何时产生了方向变化。” - 使用该覆盖方法,您可以让 android 处理方向,同时使用 'config' 参数来检查它是横向还是纵向的旋转。如果这不是你的意思,道歉
    • 即使我调用该方法的 super() 构造函数,也不会调用 oncreate
    猜你喜欢
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 2013-07-11
    • 2018-09-14
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多