在将设备保持在横向模式的同时打开应用程序时,在“纵向活动”对话框中显示横向方向

时间:2016-08-31 13:03:25

标签: android android-layout

根据产品要求,我必须保持应用程序的方向为纵向移动和横向平板电脑。 在调用onCreate()

之前,使用以下代码为super.onCreate()回调中的每个活动设置方向
public static void updateOrientation(Activity activity) {
    boolean hasAPI18 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
    if (isTablet()) {
        activity.setRequestedOrientation(hasAPI18 ? ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    } else {
        activity.setRequestedOrientation(hasAPI18 ? ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

适用于移动设备的工作方案:

  1. 使设备保持纵向
  2. 打开申请
  3. 执行事件以显示对话框
  4. 结果:在人像活动中,对话框在纵向模式下正常显示。

    针对移动设备的错误情况:

    1. 使设备保持横向
    2. 打开申请
    3. 执行事件以显示对话框
    4. 结果:在纵向活动上对话框显示在横向模式中,因此只有2/3部分对话框可见。

      已验证:

      1. 在移动设备上显示对话框时,活动方向和窗口方向设置为纵向。

3 个答案:

答案 0 :(得分:1)

要解决此问题,我从supportLibraryVersion更新了23.1.2 to 24.1.1。我不确定根本原因。我检查了supportLibrary的发行说明,但没有修复与此相关的任何错误。但更新支持库版本帮助我解决了这个问题。希望它会帮助某人

答案 1 :(得分:0)

必须添加值文件夹,如下所示

values               (is_tablet=false) Mobile
values-sw600dp       (is_tablet=true)  7  inch Tablets
values-sw720dp       (is_tablet=false) 10 inch Tablets

在其中添加包含

bool.xml
     <?xml version="1.0" encoding="utf-8"?>
     <resources>
     <bool name="is_tablet">true</bool>
     </resources>

在所有活动和对话框中使用移动设备和横向平板电脑的对话框

获取此值
   if(getApplicationContext().getResources().getBoolean(R.bool.is_tablet)){
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }else{
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

答案 2 :(得分:0)

你可以试试吗

setRequestedOrientation(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT
            ? ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);

并在清单中添加以下行。

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

它的工作!