2012-09-20 37 views
1

在“景观”模式中,我有两个FrameLayouts由一个活动控制并使用两个片段。在'肖像'模式中,我有一个FrameLayout由一个活动控制,在选择一条线上,我调用另一个活动以使用详细片段显示详细信息。片段方向更改 - 比横向更好的测试

在“肖像”细节活动中,我有以下检查onCreate()方法。如果(getResources()。getConfiguration()。orientation == Configuration.ORIENTATION_LANDSCAPE){ finish(); return; }

上述作品很好,但,

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

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

回答

1

或创建一个布尔值(从谷歌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

优点是你可以在运行时读取这个值&你可以有特殊的资源限定符的特例...例如您可以通过调用您的活动在运行时读取这个值:

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> 

这方式你可以简单地使用一个活动的正常情况下(android:enabled =“@ bool/normal_screen”),并使用小屏幕的特殊活动android:enabled =“@ bool/small_screen”

警告:将不适用于新的维德自从蜂巢以来。You can read why this method is not allowed anymoreread about working similar solution

+0

感谢您的支持。对不起,谢谢你。 – jimsis

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; 
}