Android:如果方向锁定,也检测屏幕方向更改

时间:2017-03-06 17:02:25

标签: android landscape-portrait

我有一个带有一个Activity的Android应用和一个带有多个片段的自定义ViewPager。我的整个活动都是纵向锁定的,但现在我需要在特定片段内检测设备是否处于横向状态并启动另一个锁定在横向中的活动。在这个新活动中,当用户将设备放入肖像时,我会将其关闭并返回纵向活动。 这是AndroidManifest.xml代码:

 <activity
        android:name="com.mypackage.MainActivity"
        android:configChanges="orientation"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.AppCompat.Light" >
    </activity>

这是应检测格局的片段内的代码:

public void onConfigurationChanged(Configuration myConfig) {
    int orient = getResources().getConfiguration().orientation;
    switch (orient) {
    case Configuration.ORIENTATION_LANDSCAPE:
        //Launch new activity
        break;
    }       
}

现在我注意到onConfigurationChanges从未使用此清单配置调用,但只有在我删除时才会调用

android:screenOrientation="portrait"

有一种方法可以将MainActivity锁定在纵向和截取景观中吗?

1 个答案:

答案 0 :(得分:-1)

  

现在我注意到onConfigurationChanges()永远不会被调用

为什么这对你来说太过分了?您明确禁用了方向更改,因此无法调用此方法。请注意,方向指的是屏幕方向,而不是设备的方向。

  

当设备处于横向状态并启动另一个锁定在横向

中的活动时

您要么吃蛋糕,要么保留蛋糕,以便强制执行固定方向或调用onConfigurationChanges()

  

启动另一项活动锁定

为什么不简单地为同一个活动设置单独的布局文件?交换机将由框架自动处理,因此不需要特殊代码 - 只需在正确命名的文件夹中存档(参见文档:https://developer.android.com/guide/topics/resources/providing-resources.html