標籤:des android style blog http io ar color 使用
轉載: http://blog.csdn.net/huxueyan521/article/details/8954844
通過windowmananger來在視窗上添加view的時候,需要設定alert參數,而且要添加alert許可權
mLayoutParams = new WindowManager.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_SYSTEM_ALERT, LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSPARENT); mLayoutParams.gravity = Gravity.LEFT | Gravity.TOP;
許可權:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
dialog是依附於activity存在的。但是app中經常需要使用以下的情況,在service中做一些後台操作,在某個臨界條件滿足時,顯示一個dialog告知使用者。
這時dialog無法直接從service中啟動起來,會報出android.view.WindowManager$BadTokenException:Unable to add window的錯誤。
解決方案有兩種:
1. 顯示一個系統界別的dialog,即全域性質的dialog。這種dialog在任何介面下都可以彈出來。但是,這種dialog不相應home鍵和返回鍵,即強制使用者必須對dialog作出操作後。
使用方法是在dialog.show()語句之前設定dialog的window的type是system alert型。如下:
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); dialog.show();
還需要在AndroidManifest.xml中增加許可權:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
2. 在dialog的背後加一個透明的activity。即先顯示一個透明的activity,在使用activity的context顯示dialog。需 要注意的是,activity在destroy的時候一定要把dialog給dismiss掉,否則activity消失但dialog還在,會 crash。
透明activity的建立方法是在AndroidManifest.xml中添加theme:
<activity android:name="com.a.b.activity" android:theme="@android:style/Theme.Translucent"> </activity>
另外,需要設定activity沒有actionbar,設定方法是在Activity的onCreate方法中增加:
requestWindowFeature(Window.FEATURE_NO_TITLE);
[Android Pro] service中顯示一個dialog 或者通過windowmanage顯示view