設定視窗相關(全螢幕,去title,指定方向)


很多程序在運行時都會把視窗最大化(全螢幕)且去掉 title,尤其是遊戲,這樣除了可以避免不必要的觸碰之外還能讓視覺上有比較好的範圍,全螢幕必須由 Window 類別達成,如下

   1:  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

事實上是等於這樣
   1:  Window w = getWindow();
   2:  w.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
當然 setFlags() 還有很多參數可以設定,參考這裡

去掉 Title 可使用 Activity 的 requestWindowFeature( ) 完成,如下
   1:  requestWindowFeature(Window.FEATURE_NO_TITLE);

指定視窗方向也是很常使用的方法,一般手機的預設都是自動旋轉,在某些情況下我們必須固定視窗方向,舉例來說橫軸射擊遊戲不會讓你旋轉畫面,方法如下

   1:  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
   2:  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

第 1 行為固定直式視窗畫面
第 2 行為固定橫式視窗畫面
必須注意的是如果程序會啟動不同的 Activity ,那在每個 Activity 的 onCreate() 都必須寫入設定,以上是用程式碼來達成,缺點是在啟動程序時還是會先顯示狀態列,我們可以改在 AndroidManifest.xml 中加入屬性這樣在啟動時就不會顯示狀態列了,如
去掉 title bar + 全螢幕

   1:  android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar.Fullscreen"

指定視窗方向

   1:  android:screenOrientation="portrait"
要注意這2個屬性必須在 <activity> 標籤內使用,如
   1:  <activity
   2:              android:name=".CopyRightFlow"
   3:              android:label="@string/title_activity_main" 
   4:              android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar.Fullscreen"
   5:              android:screenOrientation="portrait">
   6:              
   7:              <intent-filter>
   8:                  <action android:name="android.intent.action.MAIN" />
   9:   
  10:                  <category android:name="android.intent.category.LAUNCHER" />
  11:              </intent-filter>
  12:              
  13:          </activity>


將之前的版權宣告流程修改為全螢幕,去Title,程式碼為

   1:  package com.example.helloworld;
   2:   
   3:  import android.app.Activity;
   4:  import android.content.Context;
   5:  import android.content.Intent;
   6:  import android.content.pm.ActivityInfo;
   7:  import android.graphics.Typeface;
   8:  import android.net.ConnectivityManager;
   9:  import android.net.NetworkInfo;
  10:  import android.net.Uri;
  11:  import android.os.Bundle;
  12:  import android.view.Gravity;
  13:  import android.view.View;
  14:  import android.view.View.OnClickListener;
  15:  import android.view.Window;
  16:  import android.view.WindowManager;
  17:  import android.widget.Button;
  18:  import android.widget.TextView;
  19:   
  20:  public class MainActivity extends Activity {
  21:   
  22:      static final String tLog = "Trace Log";
  23:   
  24:      TextView tv; // init by xml use
  25:   
  26:      Button bYes; // enter button
  27:      Button bNo; // exit button
  28:      
  29:      @Override
  30:      public void onCreate(Bundle savedInstanceState) {
  31:   
  32:          super.onCreate(savedInstanceState);
  33:          
  34:          setWindowFeature();
  35:          
  36:          initByXml();
  37:   
  38:      }
  39:      
  40:      void setWindowFeature(){
  41:          //fullscreen
  42:          getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
  43:          //no title
  44:          requestWindowFeature(Window.FEATURE_NO_TITLE);
  45:          //portrait
  46:          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  47:      }

47行之後都是相同的,注意第 34 行 setWindowFeature() 方法就是本篇介紹的方法,你必須放在 super.onCreate()之後

結果為


















0 意見:

張貼留言

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Affiliate Network Reviews