android判斷橫屏
㈠ android如何在代碼中判斷橫豎屏
Android中判斷橫豎屏是通過Configuration 這個類來判斷的。
Configuration.ORIENTATION_LANDSCAPE 表示橫屏。
Configuration.ORIENTATION_PORTRAIT表示豎屏。
以下是完整代碼:
public boolean isScreenChange() {
Configuration mConfiguration = context.getResources().getConfiguration(); //獲取設置的配置信息
int ori = mConfiguration.orientation ; //獲取屏幕方向
if(ori == Configuration.ORIENTATION_LANDSCAPE){
//橫屏
return true;
}else if(ori == Configuration.ORIENTATION_PORTRAIT){
//豎屏
return false;
}
return false;
}
避免在轉屏時重啟Activity
android中每次屏幕方向切換時都會重啟Activity,所以應該在Activity銷毀前保存當前活動的狀態,在Activity再次 Create的時候載入配置,那樣,進行中的游戲就不會自動重啟了!
要避免在轉屏時重啟Activity,可以通過在AndroidManifest.xml文件中重新定義方向(給每個Activity加上android:configChanges=」keyboardHidden|orientation」屬性)。
在需要控制屏幕顯示方向的Activity中重寫onConfigurationChanged(Configuration newConfig)方法,這樣在轉屏時就不會重啟Activity了。
㈡ android 不是activity怎麼監測屏幕旋轉
Camera相關的程序,被屏幕旋轉搞得頭大,一方面得考慮屏幕旋轉後布局的變化,另一方面得搞清楚屏幕的旋轉方向、角度與Camera的Preview角度的關系。本來通過重載Activity的onConfigurationChanged方法,可以檢測到屏幕旋轉,但發現有一個問題,它只能檢測水平方向與垂直方向的切換,無法檢測180度的跳轉(例如:水平方向突然轉180度到水平方向),所以最後不得不換成OrientationEventListener方法來解決問題。在這里分享下經驗,並就此順便總結下Android開發中屏幕旋轉的處理吧。
1. 不做任何處理的情況下
如果沒有針對性地做任何處理的話,默認情況下,當用戶手機的重力感應器打開後,旋轉屏幕方向,會導致app的當前activity發生onDestroy-> onCreate,會重新構造當前activity和界面布局,很多橫屏/豎屏的布局如果沒有很好的設計的話,轉換為豎屏/橫屏後,會顯示地很難看。
如果想很好地支持屏幕旋轉,則建議在res中建立layout-land和layout-port兩個文件夾,把橫屏和豎屏的布局文件放入對應的layout文件夾中。
2. 如何設置固定的屏幕方向
在AndroidManifest.xml對應的 activity 屬性中,添加:
android:screenOrientation="landscape" //橫屏
android:screenOrientation="portrait" //豎屏
那麼,默認的情況下,應用啟動後,會固定為指定的屏幕方向,即使屏幕旋轉,Activity也不會出現銷毀或者轉向等任何反應。
3. 強制開啟屏幕旋轉效果
如果用戶的手機沒有開啟重力感應器或者在AndroidManifest.xml中設置了android:screenOrientation,默認情況下,該Activity不會響應屏幕旋轉事件。如果在這種情況下,依然希望Activity能響應屏幕旋轉,則添加如下代碼:
// activity的 onCreate 函數中
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
4. 屏幕旋轉時,不希望activity被銷毀
如果希望捕獲屏幕旋轉事件,並且不希望activity 被銷毀,方法如下:
(1)在AndroidManifest.xml對應的activity屬性中,添加:
android:configChanges="orientation|screenSize"
(2)在對應的activity中,重載函數onConfigurationChanged
@Override
public voidonConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
在該函數中可以通過兩種方法檢測當前的屏幕狀態:
第一種:
判斷newConfig是否等於Configuration.ORIENTATION_LANDSCAPE,Configuration.ORIENTATION_PORTRAIT
當然,這種方法只能判斷屏幕是否為橫屏,或者豎屏,不能獲取具體的旋轉角度。
第二種:
調用this.getWindowManager().getDefaultDisplay().getRotation();
該函數的返回值,有如下四種:
Surface.ROTATION_0,Surface.ROTATION_90,Surface.ROTATION_180,Surface.ROTATION_270
其中,Surface.ROTATION_0 表示的是手機豎屏方向向上,後面幾個以此為基準依次以順時針90度遞增。
(3) 這種方法的Bug
最近發現這種方法有一個Bug,它只能一次旋轉90度,如果你突然一下子旋轉180度,onConfigurationChanged函數不會被調用。
㈢ android怎麼設置橫豎屏切換
方法一:
1、首先在android手機打開「設置」這個選項的,點擊「顯示」這個功能;
㈣ android 怎麼設置鎖屏界面可以橫豎屏切換
Android橫豎屏要解決的問題應該就兩個:
一.布局問題
二.重新載入問題
1.布局問題:如果不想讓軟體在橫豎屏之間切換,最簡單的辦法就是在項目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation屬性,他有以下幾個參數:
"unspecified":默認值 由系統來判斷顯示方向.判定的策略是和設備相關的,所以不同的設備會有不同的顯示方向.
"landscape":橫屏顯示(寬比高要長)
"portrait":豎屏顯示(高比寬要長)
"user":用戶當前首選的方向
"behind":和該Activity下面的那個Activity的方向一致(在Activity堆棧中的)
"sensor":有物理的感應器來決定。如果用戶旋轉設備這屏幕會橫豎屏切換。
"nosensor":忽略物理感應器,這樣就不會隨著用戶旋轉設備而更改了("unspecified"設置除外)。
也可以在Java代碼中通過setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)來設置。
如果要讓軟體在橫豎屏之間切換,由於橫豎屏的高寬會發生轉換,有可能會要求不同的布局。可以通過以下方法來切換布局:
1)在res目錄下建立layout-land和layout-port目錄,相應的layout文件不變,比如main.xml。layout-land是橫屏的layout,layout-port是豎屏的layout,其他的不用管,模擬器會自動尋找。
2)通過 this.getResources().getConfiguration().orientation來判斷當前是橫屏還是豎屏然後來載入相應的 xml布局文件。因為當屏幕變為橫屏的時候,系統會重新呼叫當前Activity的onCreate方法,你可以把以下方法放在你的onCreate中來檢查當前的方向,然後可以讓你的setContentView來載入不同的layout xml.
1 if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
2 Log.i("info","landscape"); // 橫屏
3 }
4 else if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {
5 Log.i("info","portrait"); // 豎屏
6 }
在onConfigurationChanged()方法中也可以檢測擁有硬鍵盤的鍵盤狀態
1 //檢測實體鍵盤的狀態:推出或者合上
2 if (newConfig.hardKeyboardHidden ==Configuration.HARDKEYBOARDHIDDEN_NO){
3 //實體鍵盤處於推出狀態,在此處添加額外的處理代碼
4 }
5 else if(newConfig.hardKeyboardHidden ==Configuration.HARDKEYBOARDHIDDEN_YES){
6 //實體鍵盤處於合上狀態,在此處添加額外的處理代碼
7 }
2.重新載入問題。如果不需要從新載入,可以在AndroidManifest.xml中加入配置 android:configChanges="orientation|keyboardHidden",配置 android:configChanges的作用就是如文檔所說的:Specify one or more configuration changesthat the activity will handle itself. If not specified, the activity will berestarted if any of these configuration changes happen in the system。這樣在程序中Activity就不會重復的調用onCreate()甚至不會調用onPause、onResume.只會調用一個 onConfigurationChanged(Configuration newConfig)。如果需要重新載入,則不需要做任何修改。不過如果需要在重新載入過程中保存之前的操作內容或數據,則需要保存之前的數據。然後在 activity的onCreate()中取出來。當然,如此就不能設置android:configChanges()了,否則就不會調用 onCreate()方法。
如果要徹底禁止翻轉,可以設置android:screenOrientation的屬性為nosensor,如此就可以忽略重力感應帶來的麻煩了。不過在模擬器上不管用,在真機上是正確的。android:screenOrientation="portrait"
則無論手機如何變動,擁有這個屬性的activity都將是豎屏顯示。
android:screenOrientation="landscape",為橫屏顯示。
這里提一個小知識,Android模擬器中,快捷鍵"Ctrl+F11/F12"可以實現轉屏
㈤ android開發橫豎屏問題
Android橫屏豎屏設置
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//設置成全屏模式
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE););//強制為橫屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//豎屏
我做的東西裡面還用到了去掉標題欄。
我也貼出來
requestWindowFeature(Window.FEATURE_NO_TITLE);
垂直居中:
android:layout_centerVertical="true"
水平居中:
android:layout_centerHorizontal="true"
1.hideStatusbarAndTitlebar()隱藏statusbar和titlebar.
private void hideStatusbarAndTitlebar() {
final Window win = getWindow();
// No Statusbar
win.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// No Titlebar
requestWindowFeature(Window.FEATURE_NO_TITLE);
}
2.設置屏幕顯示模式ScreenOrientation.
在activity里設置android:screenOrientation的值。
android:screenOrientation的屬性有以下值:
unspecified(默 認值,由系統判斷狀態自動切換),The default value. The system chooses the orientation. The policy it uses, and therefore the choices made in specific contexts, may differ from device to device.
landscape,橫屏
portrait,豎屏
user(用戶當前設置的orientation值),The user's current preferred orientation.
behind(下一個要顯示的Activity的orientation值),The same orientation as the activity that's immediately beneath it in the activity stack.
sensor(傳 感器的方向),The orientation determined by a physical orientation sensor. The orientation of the display depends on how the user is holding the device; it changes when the user rotates the device.
nosensor(不 使用感測器,這個效果差不多等於unspecified).An orientation determined without reference to a physical orientation sensor. The sensor is ignored, so the display will not rotate based on how the user moves the device. Except for this distinction, the system chooses the orientation using the same policy as for the "unspecified" setting.
3.水平/垂直居中的方法.
設置parent的android:gravity為"center"。
4.獲得當前屏幕寬高的方法.
Display display = getWindowManager().getDefaultDisplay();
Config.screenWidth = display.getWidth();
Config.screenHeight = display.getHeight();