2011-03-02 86 views
4

我加了android:configChanges="orientation",我重写了。我只想在设备具有平板大小的显示分辨率设置时允许横向方向更改(短边大于480像素 - 建议更好的处理方式)。我一直在想,这将以两种方式之一运行,但是我的手机或模拟器都不能在我的测试中工作。有条件地处理方向更改

我的第一个想法是不要调用超类'的实现,但我得到一个异常抛出,抱怨我没有调用超类。

我的第二个想法是在将它传递给超类之前手动将newConfig.orientation设置为Configuration.ORIENTATION_PORTRAIT。在我的Activity和框架中的实际Activity类之间,我有一个ActivityBase类,我使用它来覆盖它。我可以在ActivityBase中为newConfig.orientation的值进行烘烤,以确定配置对象实际上是否具有新值,但它会被忽略,并且方向更改已经发生。

我在哪里可以放置代码,使我可以在某些情况下有条件地缩短方向更改并允许其他方法?

回答

2

我会设置请求的方向在活动onCreate()方法来解决,这样的:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

如果显示不是xhdmi显示或具有所需的分辨率。

+0

我假设这是在我的xml中使用orientation =“portrait”的等价物。所以,当我不叫这行代码时,我正在使用设备给我的方向?听起来不错......现在就试试看。顺便说一句...有关显示器属性的任何见解要看?我认为px> 480在短边...有没有一种属性或方法可以更简洁地告诉我“超大屏幕”? – Rich 2011-03-02 15:53:30

+0

是的,这与在xml中设置属性相同。对于显示问题,请使用DisplayMetris:DisplayMetrics指标= new DisplayMetrics(); 。getWindowManager()getDefaultDisplay()getMetrics(指标)。此处定义的密度为xhdmi的DENSITY_XHIGH。 – HefferWolf 2011-03-02 15:59:52

+0

可以测试'if((getResources()。getConfiguration().screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK)== SCREENLAYOUT_SIZE_XLARGE)'工作(如果你正在使用at最少的API级别9,其中xlarge被添加)? – erichamion 2011-03-02 17:06:20