接着上一個問題,解決了SurfaceView閃屏問題以後(http://www.cnblogs.com/Joanna-Yan/p/4829325.html),又有了一個新的問題。如今我想設置含有fragment+viewpager的activity橫屏。其中一個fragment有視頻播放功能,含SurfaceView.html
當我橫屏拿着平板時,打開程序進入到該activity,是正常的。當豎屏拿着打開程序進入到該activity時,就會一直處於黑屏的狀態。緣由應該仍是SurfaceView。難道程序轉入後臺或者黑屏之後(只要是不繪製狀態),屏幕方向就是系統默認的屏幕方向嗎?java
解決:android
1.在AndroidManifest.xml的對應的activty中,設置android:screenOrientation="nosensor",即 忽略物理感應器,這樣就不會隨着用戶旋轉設備而更改了 ( "unspecified"設置除外 )app
設置android:configChanges="orientation|keyboardHidden|keyboard",橫豎屏切換時,不會從新加載頁面。ide
2.在對應的Activity中設置橫屏。setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);佈局
相關詳解:關於Android設置全屏和橫屏idea
橫屏設置spa
XML文件設置--portrait爲縱向,landscape爲橫向code
android:screenOrientation=["unspecified" | "user" | "behind" |"landscape" | "portrait" | "sensor" | "nonsensor"]視頻
screenOrientation 用來指定Activity的在設備上顯示的方向,每一個值表明以下含義:
"unspecified" 默認值 由系統來判斷顯示方向.斷定的策略是和設備相關的,因此不一樣的設備會有不一樣的顯示方向.
"landscape" 橫屏顯示(寬比高要長)
"portrait" 豎屏顯示(高比寬要長)
"user" 用戶當前首選的方向
"behind" 和該Activity下面的那個Activity的方向一致(在Activity堆棧中的)
"sensor" 有物理的感應器來決定。若是用戶旋轉設備這屏幕會橫豎屏切換。
"nosensor" 忽略物理感應器,這樣就不會隨着用戶旋轉設備而更改了 ( "unspecified"設置除外 )。
代碼設置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
全屏兩種方法:
方法一:java代碼
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //設置無標題
requestWindowFeature(Window.FEATURE_NO_TITLE); //設置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); }
方法二:xml佈局
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.andyidea" android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name" >
<activity android:name=".login.LoginActivity" android:label="@string/app_name" android:theme="@android:style/android.NoTitleBar.Fullscreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>