2012-09-20 49 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; 
}