2014-08-29 71 views
0

我想禁用在我的Android應用程序中更改方向,但我想允許用戶使用他的本機方向:橫向平板電腦和手機肖像。如何修復Android上不同設備的屏幕方向

我嘗試使用不同的值設置「android:screenOrientation」,但找不到合適的值。

是這樣的任務需要編寫java代碼(和我需要寫什麼代碼),或者這可以使用清單解決?

UPD正如@ Pierrew的提示,我需要爲縱向佈局創建res/layout/main.xml爲默認佈局,res/layout-land/main.xml景觀佈局和res/layout-port/main.xml。所以,我需要知道,如何定義res/layout/main.xml中的所有佈局,並且只闡明瞭res/layout-land/main.xmlres/layout-port/main.xml中的方向。

我想我需要在res/layout/main.xml聲明佈局,並在res/layout-land/main.xmlres/layout-port/main.xml帶來的一切佈局屬性只覆蓋android:screenOrientation派生布局價值。

我該怎麼做?

+1

這個問題是一個已答覆[這裏](http://stackoverflow.com/questions/9627774/android-allow-portrait-and-landscape-for-tablets-but-force-portrait-on-phone) – 2014-08-29 21:22:00

回答

0

設置android:screenOrientation="landscape"在佈局xml是做到這一點的方法。要支持不同的設備(平板電腦和手機),您需要使用大小限定符。在您的res文件夾中,您將不得不創建res/layout-large/main.xml以支持平板電腦。所以如果你想要平板電腦的景觀。在你的res/layout-large/main.xml中,你把android:screenOrientation="landscape"。在你的普通res/layout/main.xml中,你可以放android:screenOrientation="portrait"。 Android會自動檢測用戶正在使用的設備並加載適當的xml。欲瞭解更多信息,請查看http://developer.android.com/training/multiscreen/screensizes.html#TaskUseSizeQuali

+0

而我如何描述佈局在一個文件,並只描述res/layout-large/main.xml中的差異(以及我需要爲手機創建的內容?) – 2014-08-29 22:48:01

+0

如果其他所有內容保持不變,那麼您將不得不復制res/layout內的所有內容(默認情況下此文件夾用於手機)res/layout-large /,然後進行配置更改。這是通過Android設計的,因爲人們通常會重新排列布局以確保所有內容都適合大屏幕。 – Pierrew 2014-08-29 23:02:24

+0

此外,如果您使用relativelayout,所有UI元素可能會移動,您必須確保在從橫向模式切換到縱向模式時,所有內容都可以正確對齊。 – Pierrew 2014-08-29 23:08:34

0

中的大小限定符部分您可以使用這些方法使用一些小邏輯。

Boolean isTablet = (ctx.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; 

以編程方式更改屏幕方向。

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE 

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT 

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

ActivityInfo:

http://developer.android.com/reference/android/content/pm/ActivityInfo.html

這應該爲你做的伎倆:

import android.provider.Settings; 
public static void setAutoOrientationEnabled(ContentResolver resolver, boolean enabled){ 
    Settings.System.putInt(context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, enabled ? 1 : 0); 
} 

添加許可權的AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_SETTINGS" />