防止在某些设备上更改Android方向

时间:2013-02-24 14:15:57

标签: android layout orientation

我知道您可以限制Android应用程序清单文件中的方向更改,但我想知道是否有办法根据设备类型/大小进行操作。

我想在小型/中型手机上使用它,但允许在大型手机/平板电脑上使用。

实现这一目标的最佳方法是什么?任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:6)

为此,我认为你需要将两件事合二为一。

  1. 首先,获取设备屏幕尺寸
  2. 然后,根据结果,启用或禁用方向。
  3. 第一部分:

    int screenSize = getResources().getConfiguration().screenLayout &
            Configuration.SCREENLAYOUT_SIZE_MASK;
    
    switch(screenSize) {
        case Configuration.SCREENLAYOUT_SIZE_LARGE:
            Toast.makeText(this, "Large screen",Toast.LENGTH_LONG).show();
            break;
        case Configuration.SCREENLAYOUT_SIZE_NORMAL:
            Toast.makeText(this, "Normal screen",Toast.LENGTH_LONG).show();
            break;
        case Configuration.SCREENLAYOUT_SIZE_SMALL:
            Toast.makeText(this, "Small screen",Toast.LENGTH_LONG).show();
            break;
        default:
            Toast.makeText(this, "Screen size is neither large, normal or small" , Toast.LENGTH_LONG).show();
    }
    

    信用:https://stackoverflow.com/a/11252278/450534 解决方案已在SO 上提供)

    最后,根据上述代码的结果,其中任何一个:

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    

    OR

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
    

答案 1 :(得分:1)

嗯,我可能错了,但据我所知,没有直接的办法。

您需要以编程方式检查屏幕尺寸,并在此基础上允许或禁止方向更改。

if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) 
{     
    // screen is large.. allow orientation changes
}

else
{
       //restrict orientation 
}

答案 2 :(得分:0)

您可以在活动onCreate期间使用,检查您拥有的设备尺寸,并调用方法setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);(或您想要的尺寸方向)。

请注意,如果活动不在请求的方向上,则会销毁一个新的活动。

答案 3 :(得分:0)

检查代码中的屏幕大小并决定

setRequestedOrientation();

是不是

答案 4 :(得分:0)

您需要覆盖public void onConfigurationChanged(Configuration newConfig)并创建自己的逻辑来检查密度和屏幕大小。

但要注意......这不是一个好习惯。