“第二屆
Google 暑期大學生部落格分享大賽 - 2011 Android 成長篇 ”
在某些應用情境中,我們會需要使Activity的背景透明,如開發一個惡作劇應用,使用者在觸控螢幕幕任意位置的時候,螢幕呈現"哢喳"碎裂的圖片。在這種情況下可以讓這個Activity設定為Translucent的主題。同樣某些應用會需要讓一些部分內容置頂顯示在所有Activity之上,如開發一個音樂播放器同步顯示歌詞時,當播放器在後台運行時,需要歌詞在切換不同Activity時始終置頂顯示著,這種情況可以通過Android的System
Overlay實現。
下面這個簡單例子實現了前面所說的需求,圖1是運行這個例子後的,其中"Google Android"TextView以TYPE_SYSTEM_OVERLAY放在了螢幕的中央。
圖1,顯示了這個Activity的背景即主畫面,當按下HOME鍵後,並滑動到右邊第三個螢幕時,Google Android在這個過程中一直存在,並不影響使用者的操作,效果2:
圖1
圖2
布局XML代碼
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.limitfan.overlay" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="4" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <!--設定android:theme的主題為透明無標題列 --> <activity android:theme="@android:style/Theme.Translucent.NoTitleBar" android:name=".AndroidOverlayActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <!--置頂顯示需要的許可權 --> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /></manifest>
Activity代碼
package com.limitfan.overlay;import android.app.Activity;import android.os.Bundle;import android.view.WindowManager;import android.widget.TextView;public class AndroidOverlayActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //獲得WindowManager對象 WindowManager wm = (WindowManager)getApplicationContext().getSystemService(WINDOW_SERVICE); WindowManager.LayoutParams params = new WindowManager.LayoutParams(); params.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY; params.width = WindowManager.LayoutParams.WRAP_CONTENT; params.height = WindowManager.LayoutParams.WRAP_CONTENT; //設定始終顯示的TextView對象 TextView tv = new TextView(this); tv.setText("Google Android"); wm.addView(tv, params); }}