2012-10-31 29 views
3

我有一個Android手機應用程序,我現在要更新以支持平板電腦大小的屏幕(特別是Galaxy Tab 10.1)。我想出了整個res/layout的事情,所以這很好。但是,我建立了我的應用程序,在AndroidManifest.xml中設置了固定的屏幕方向,設置爲android:screenOrientation="portrait"根據屏幕尺寸有一個固定的方向

現在,我想擁有以下內容:有一個固定方向爲每個屏幕大小,一個固定在肖像(佈局 - 小),另一個爲風景。

使用res/layout-small-landres/layout-large-port不會做我想做的事,因爲它仍然從肖像切換到風景並返回。更糟糕的是,當我將手機旋轉到風景時,應用程序崩潰,因爲res/layout-small-land不存在。

我可以通過只定義XML文件來做到這一點,還是我必須添加代碼?

+0

你有沒有在Activity標籤中定義android:configChanges =「keyboardHidden | orientation」? –

+0

不,但似乎是方向改變時。當平板電腦處於縱向模式並且應用程序啓動時,我也希望它以橫向模式運行。 –

+0

您想要設置哪種類型的設備的橫向模式?我的意思是(hdpi/ldpi/mdpi)?我想你必須提到這一點。即使您想根據設備屏幕布局更改方向,也不要將修復方向置於該活動的清單文件中。請嘗試一下,讓我知道。 –

回答

-2

剛剛從manifest.xml中

刪除android:screenOrientation="portrait"並添加布局大的土地,佈局小陸,還留着佈局大,佈局小文件夾。

希望它適合你。享受編碼:)

+0

這並不能阻止旋轉設備時旋轉的應用程序。 –

-1

是的,你可以創建相同的佈局。看到接受的答案在這裏:SO

它會解決你的問題。

UPDATE

如果你想將其設置爲每個屏幕尺寸,那麼請參閱下面的代碼來獲取屏幕的密度。並基於此和屏幕大小,您必須預先設置方向。

代碼來檢查密度:

public void ScreenSupport(){ 
    Display display = getWindowManager().getDefaultDisplay(); 
    DisplayMetrics dm = new DisplayMetrics(); 
    display.getMetrics(dm); 

    int width = display.getWidth(); 
    int height = display.getHeight(); 
    int density = dm.densityDpi; 
    String densityString = null; 

    if(density == DisplayMetrics.DENSITY_HIGH) { 
     densityString = "HDPI"; 
    } else if(density == DisplayMetrics.DENSITY_MEDIUM) { 
     densityString = "MDPI"; 
    } else if(density == DisplayMetrics.DENSITY_LOW) { 
     densityString = "LDPI"; 
    }else if(density == DisplayMetrics.DENSITY_DEFAULT) { 
     densityString = "DEFAULT"; 
    } 

    /* System.out.println("Screen Height is: "+height+ " and Width is: "+width); 
    System.out.println("Screen Support: "+densityString);*/ 
} 
+0

不,因爲當我旋轉設備時它不會停止應用程序的旋轉。我想根據屏幕尺寸修復方向。 –

+0

Listern我的朋友,有不同的佈局可用來支持所有可用的設備。您只需停止清單中的方向,然後運行您的應用程序。它會起作用。正如我早先嚐試過的那樣。 –

+0

另請參閱:http://stackoverflow.com/questions/2124046/how-do-i-specify-different-layouts-for-portrait-and-landscape-orientations –