【问题标题】:When opening app while keeping device in landscape mode then, on Portrait activity dialog is showing landscape orientation在将设备保持在横向模式的同时打开应用程序时,纵向活动对话框显示横向
【发布时间】:2016-08-31 13:03:24
【问题描述】:

根据产品要求,我必须将应用的方向保持为移动设备的纵向和平板电脑的横向。 在调用super.onCreate()之前,使用以下代码为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. 执行事件以显示对话框

结果:在纵向活动中,对话框以纵向模式正常显示。

移动错误场景:

  1. 让设备保持横向
  2. 打开应用程序
  3. 执行事件以显示对话框

结果:在纵向活动中,对话框以横向模式显示,因此只有 2/3 部分的对话框可见。

已验证:

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

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你可以试试这个

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

      它的工作!

      【讨论】:

      • 感谢您的帮助。我明天试试这个。
      • 我厌倦了你的方法,但它没有用。我认为我的代码库中有一些东西导致了这个问题。但我无法弄清楚发生了什么
      • 我正在查看手机和电视
      【解决方案3】:

      必须像下面这样添加值文件夹

      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);
          }
      

      【讨论】:

      • 根据产品要求,无论 Tab 10 英寸还是 7 英寸,我都需要将平板电脑的方向设置为横向,并将移动设备设置为纵向。
      • 感谢帮助我在代码中使用相同的方法来确定设备是移动设备、平板电脑还是电视。据我了解,我的代码本身存在一些导致此问题的错误。找到错误后,我会更新您,但目前我正在努力寻找它。
      猜你喜欢
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 2011-06-28
      • 2012-04-29
      相关资源
      最近更新 更多