在“横向”模式下,我有两个FrameLayouts由One Activity控制并使用两个片段。在“纵向”模式下,我有一个FrameLayout由One Activity控制,在选择一条线上我调用另一个活动来使用细节片段显示细节
在'Portrait'详细信息活动中,我在onCreate()方法中检查了方向。
if(getResources()。getConfiguration()。orientation == Configuration.ORIENTATION_LANDSCAPE){ 完(); 返回; }
以上效果很好,但
当我有一个“小”设备时,会出现问题。在这种情况下,在“横向”模式下,我不想要两个片段视图,而是我想表现得像“肖像”视图。但是,由于当详细活动启动时,设备实际上处于“横向”状态,因此它会自动完成。
所以问题是处理这个问题的最佳方法是什么?
答案 0 :(得分:1)
或创建具有bool值的自定义资源(来自Google io 2012)
<!-- in your values/custom.xml -->
<resources>
<bool name="small_screen">true</bool>
<bool name="normal_screen">false</bool>
</resources>
<!-- in your values-sw320dp/custom.xml -->
<resources>
<bool name="small_screen">false</bool>
<bool name="normal_screen">true</bool>
</resources>
注意:您必须定义一个最小屏幕宽度(sw320dp),您认为该屏幕宽度不小(link with more info)
优点是你可以在运行时读取这个值&amp;您可以拥有特殊资源限定符的特殊情况......例如您可以通过调用您的活动在运行时读取此值:
if(getResources().getBoolean(R.bool.small_screen)) {
// You have a screen which is < 320dp
} else {
// You have a screen which is >= 320dp
}
您甚至可以在清单中使用此布尔资源,以便为小屏幕启动完全不同的活动
<activity android:name="SmallScreenActivity"
android:enabled="@bool/small_screen"> <!-- ENABLE FOR SMALL SCREEN -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="NormalActivity"
android:enabled="@bool/normal_screen"> <!-- ENABLE FOR OTHER -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
通过这种方式你可以简单地使用一个Activity作为正常情况(android:enabled =“@ bool / normal_screen”)并使用特殊活动的小屏幕android:enabled =“@ bool / small_screen”
警告:此方法不适用于较新的设备,因为蜂窝状。 You can read why this method is not allowed anymore或read about working similar solution
答案 1 :(得分:0)
在检查方向之前,请对屏幕尺寸进行额外检查。考虑到小型设备的宽度为500像素,高度为600像素,您可以这样做。
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size); i
int width = size.x;
int height = size.y;
if ( width > 500 && height > 600 &&
getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE)
{
finish();
return;
}