5

I know you can restrict orientation change in manifest file for your Android application, but I was wondering if there is a way of doing that depending on the device type/size.

I would like to prevent it on small/medium phones but allow it on large phones/tablets.

What is the best way to achieve that? Any help would be much appreciated.

4

5 回答 5

6

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

  1. 一、获取设备屏幕尺寸
  2. 然后,根据结果,启用或禁用方向。

对于第一部分:

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

或者

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
于 2013-02-24T14:21:27.457 回答
1

好吧,我可能是错的,但据我所知,没有直接的方法可以做到这一点。

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

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

else
{
       //restrict orientation 
}
于 2013-02-24T14:20:01.003 回答
0

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

请注意,如果活动不在请求的方向上,则该活动将被销毁并创建一个新活动。

于 2013-02-24T14:21:27.097 回答
0

检查代码中的屏幕尺寸并决定

setRequestedOrientation();

或不

于 2013-02-24T14:21:27.190 回答
0

您需要覆盖公共空白onConfigurationChanged(Configuration newConfig)并创建自己的逻辑来检查密度和屏幕尺寸。

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

于 2013-02-24T14:23:58.500 回答