1

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

在“人像”详细活动中,我在 onCreate() 方法中检查了以下方向。

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

上面的效果很好,但是,

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

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

4

2 回答 2

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),您会认为屏幕不小(更多信息链接

优点是您可以在运行时读取此值,并且您可以有特殊资源限定符的特殊情况......例如,您可以通过调用您的活动在运行时读取此值:

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") 并为小屏幕使用特殊 Activity android:enabled="@bool/small_screen"

警告:此方法不适用于自蜂窝以来的较新设备。 您可以阅读为什么不再允许使用此方法阅读有关工作类似解决方案的信息

于 2012-09-20T14:06:43.053 回答
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; 
}
于 2012-09-20T13:46:06.193 回答