Android強制設定橫屏時,SurfaceView一直黑屏


  接着上一個問題,解決了SurfaceView閃屏問題之后(http://www.cnblogs.com/Joanna-Yan/p/4829325.html),又有了一個新的問題。現在我想設置含有fragment+viewpager的activity橫屏。其中一個fragment有視頻播放功能,含SurfaceView.

當我橫屏拿着平板時,打開程序進入到該activity,是正常的。當豎屏拿着打開程序進入到該activity時,就會一直處於黑屏的狀態。原因應該還是SurfaceView。難道程序轉入后台或者黑屏以后(只要是不繪制狀態),屏幕方向就是系統默認的屏幕方向嗎?

解決:

1.在AndroidManifest.xml的對應的activty中,設置android:screenOrientation="nosensor",即 忽略物理感應器,這樣就不會隨着用戶旋轉設備而更改了 ( "unspecified"設置除外 )

設置android:configChanges="orientation|keyboardHidden|keyboard",橫豎屏切換時,不會重新加載頁面。

2.在對應的Activity中設置橫屏。setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

相關詳解:關於Android設置全屏和橫屏

橫屏設置

XML文件設置--portrait為縱向,landscape為橫向

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>  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM