如何锁定某些屏幕尺寸的方向?

时间:2013-12-09 08:23:05

标签: android

我正在开发一个应用程序,该应用程序可以在4.7英寸设备以及纵向和横向两种设备上运行。

现在的问题是,我有大约50个左右的活动,如果设备屏幕尺寸小于等于5英寸,我想锁定方向垂直。我可以使用以下代码设置方向锁: -

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

以上代码我可以用来锁定方向和下面的显示指标代码: -

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();

现在我的问题是,用什么方法锁定设备的方向< = 5英寸,我是否必须在所有活动中编写此代码? 此外,我无法使用baseActivity进行扩展,因为大多数活动已经扩展了自定义侦听器类

3 个答案:

答案 0 :(得分:0)

创建一个包含代码的基类Activity类。另外50个延伸它。

答案 1 :(得分:0)

创建基本活动,扩展所有50个活动。将锁定逻辑放在该基本活动的onResume()onCreate()中并锁定其方向。

顺便说一句:50项活动真的很多。试过片段?

答案 2 :(得分:0)

最好的OOP实践之一,始终创建“BaseActivity”或“BaseFragmentActivity”,以利用代码可重用性和减少冗余。限制清单中活动方向的标准方法。

但是你必须根据条件进行限制,也不想在每个活动中重写。所以我建议创建“基本活动”,扩展到所有子活动。

public class BaseActivity extends Activity {
    public void onCreate(Bundle savedState) {
        //...

        if(isScreenLarge()) {
            // width > height, better to use Landscape
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        } else {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    }

    public boolean isScreenLarge() {
        final int screenSize = getResources().getConfiguration().screenLayout
                & Configuration.SCREENLAYOUT_SIZE_MASK;
        return screenSize == Configuration.SCREENLAYOUT_SIZE_LARGE
                || screenSize == Configuration.SCREENLAYOUT_SIZE_XLARGE;
    }
}

现在使用BaseActivity扩展您的所有活动。

希望这有帮助。