片段方向的变化 - 比景观更好的测试

时间:2012-09-20 13:27:36

标签: android android-activity orientation fragment

在“横向”模式下,我有两个FrameLayouts由One Activity控制并使用两个片段。在“纵向”模式下,我有一个FrameLayout由One Activity控制,在选择一条线上我调用另一个活动来使用细节片段显示细节

在'Portrait'详细信息活动中,我在onCreate()方法中检查了方向。

if(getResources()。getConfiguration()。orientation == Configuration.ORIENTATION_LANDSCAPE){     完();     返回; }

以上效果很好,但

当我有一个“小”设备时,会出现问题。在这种情况下,在“横向”模式下,我不想要两个片段视图,而是我想表现得像“肖像”视图。但是,由于当详细活动启动时,设备实际上处于“横向”状态,因此它会自动完成。

所以问题是处理这个问题的最佳方法是什么?

2 个答案:

答案 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 anymoreread 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; 
}