有条件地处理屏幕方向变化

4
我添加了 android:configChanges="orientation" 并重写了 onConfigurationChanged() 方法。我想要做的是,只有在设备具有平板电脑分辨率设置(较短的一侧大于480px——欢迎提供更好的处理方式!)时才允许横向方向改变。我考虑这会有两种方法可行,但在我的手机或模拟器上测试都不起作用。

我的第一个想法是不调用超类实现的 onConfigurationChanged() 方法,但我得到了一个异常抛出,指责我没有调用超类。

我的第二个想法是在传递给超类之前,将 newConfig.orientation 手动设置为 Configuration.ORIENTATION_PORTRAIT。在我的 Activity 和框架中的实际 Activity 类之间,我有一个名为 ActivityBase 的 Activity 基类,我也在其中进行了重写。我可以在 ActivityBase 中使用 Toast 查看 newConfig.orientation 的值,以确认确实传递了新值的配置对象,但它被忽略了,并且方向更改已经发生。

我应该在哪里放置代码,以便能够有条件地终止某些情况下的方向更改,并允许其他情况下的更改呢?

1个回答

2

我会在Activity的onCreate()方法中将请求的方向设置为固定值,代码如下:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

如果显示器不是xhdmi显示器或者没有必要的分辨率。


我假设这相当于在我的xml中使用orientation="portrait"。所以,当我不调用这行代码时,我使用设备提供给我的方向?听起来不错...现在要尝试一下。顺便问一句...有没有关于要查看的显示属性的见解?我想在短边上的px> 480...是否有一种属性或方法可以更简洁地告诉我“特大屏幕”? - Rich
是的,这与在xml中设置属性相同。对于显示问题,请使用DisplayMetrics:DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); 并在那里定义密度,例如xhdmi的DENSITY_XHIGH。 - HefferWolf
与其测试像素密度(可能是任何大小),不如测试 if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == SCREENLAYOUT_SIZE_XLARGE) 是否可行(如果您使用的是至少 API Level 9,其中添加了 xlarge)? - erichamion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接