系統級別的window,應用級別的彈出框Dialog/popwindow (dismiss和cancel和hide)
AlertDialog不可以繼承AlertDialog,因為AlertDialog必須首先呼叫show(),然後才可以setContentView(),否則會有crash; 但是如果contentView中有EditText,則要求必須先呼叫setContentView(),然後才可以呼叫show(),否則輸入法無法彈出。
> 系統彈出框window
許可權:<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
private void openWindow(){
//獲取WindowManager例項
final WindowManager windowManager= (WindowManager) getSystemService(Context.WINDOW_SERVICE);
//獲取視窗布局引數例項
WindowManager.LayoutParams params=new WindowManager.LayoutParams();
//設定視窗布局引數屬性
params.width= WindowManager.LayoutParams.MATCH_PARENT;
params.height=WindowManager.LayoutParams.MATCH_PARENT;
//設定window的顯示特性
params.flags=WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
//設定視窗半透明
params.format= PixelFormat.TRANSLUCENT;
//設定視窗型別
params.type=WindowManager.LayoutParams.TYPE_PHONE;
//獲取視窗布局例項
final View windowView=View.inflate(this,R.layout.window,null);
//獲取視窗布局中的按鈕例項
btn_send= (Button) windowView.findViewById(R.id.btn_send);
//設定點選事件
btn_send.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
windowManager.removeView(windowView);
}
});
//顯示視窗
windowManager.addView(windowView,params);
}
android系統級彈窗- https://blog.csdn.net/wujiewei2342/article/details/50704229
private void show() {
//Looper.prepare();
final WindowManager wm = (WindowManager) getApplicationContext().getSystemService("window");
LayoutParams para = new LayoutParams();
//設定彈窗的寬高
para.height = LayoutParams.WRAP_CONTENT;
para.width = LayoutParams.WRAP_CONTENT;
//期望的點陣圖格式。預設為不透明
para.format = 1;
//當FLAG_DIM_BEHIND設定後生效。該變數指示後面的視窗變暗的程度。
//1.0表示完全不透明,0.0表示沒有變暗。
para.dimAmount = 0.6f;
para.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_DIM_BEHIND;
//設定為系統提示
para.type = LayoutParams.TYPE_SYSTEM_ALERT;
//獲取要顯示的View
final View mView = LayoutInflater.from(getApplicationContext()).inflate(
R.layout.activity_next, null);
//單擊View是關閉彈窗
mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
wm.removeView(mView);
}
});
//顯示彈窗
wm.addView(mView, para);
//Looper.loop();
}
Android子執行緒真的不能更新UI麼- https://www.cnblogs.com/lao-liang/p/5108745.html
class NonUiThread extends Thread{
@Override
public void run() {
Looper.prepare();
TextView tx = new TextView(MainActivity.this);
tx.setText("non-UiThread update textview");
WindowManager windowManager = MainActivity.this.getWindowManager();
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
200, 200, 200, 200, WindowManager.LayoutParams.FIRST_SUB_WINDOW,
WindowManager.LayoutParams.TYPE_TOAST,PixelFormat.OPAQUE);
windowManager.addView(tx, params);
Looper.loop();
}
}
> 應用級別的Dialog,AlertDialog
使用Dialog實現全域性Loading載入框- http://blog.csdn.net/q4878802/article/details/50278283
Android:Dialog中隱藏鍵盤的注意事項- http://blog.csdn.net/bdmh/article/details/51143617
Dialog/AlertDialog的Context不能用全域性Application,只能用Activity的Context。
-- Android Dialog之dismiss和cancel和hide區別
建議用dismiss,這個比cancel少一個判斷,一般來說是夠用了,當然如果你有CancelListener的話就用cancel;
cancel:也呼叫了dismiss,只不過先判斷了mCancelMessage是否為空;
@Override
public void cancel() {
if (!mCanceled && mCancelMessage != null) {
mCanceled = true;
Message.obtain(mCancelMessage).sendToTarget();
}
dismiss();
}
dismiss:大概就是刪除檢視,呼叫Onstop回撥,並把mShowing置為false。
hide:隱藏起來又不銷燬
dismiss方法會釋放對話方塊所佔的資源,而hide方法不會。activity退出前必須呼叫dismiss方法關閉對話方塊。
如果對話方塊上有progressbar,你會發現,呼叫dismiss方法後,再呼叫show方法,出來的對話方塊,上面的progressbar不再會轉動,而呼叫hide方法的則沒有問題。
所以,最正確的呼叫方法是,在activity的onDestory方法裡呼叫dismiss方法,其他地方都用hide方法隱藏對話方塊。
dismiss可以在任何執行緒,並且銷燬了dialog物件,但是hide僅僅隱藏了對話方塊並沒有銷燬,如果打算用這方法來滅掉對話方塊就會出現問題,在Activity銷燬的時候就會出現崩潰日誌了,因為Activity銷燬時是需要把對話方塊都關閉掉的。原始碼可以看出,hide僅僅是將view.(gone)隱藏掉而已
> 應用級別的popwindow
android popwindow實現左側彈出選單層及PopupWindow- http://www.jb51.net/article/33533.htm
Android-自定義PopupWindow帶動畫的實現- http://blog.csdn.net/androidstarjack/article/details/48914139
關於PopupWindow的showAsDropDown()和showAtLocation()使用方式及其區別- http://blog.csdn.net/lnn368/article/details/51185732
PopUpWindow使用詳解(一)——基本使用- http://blog.csdn.net/harvic880925/article/details/49272285
相關文章
- window系統下升級node和npmNPM
- 如何搭建千萬級別使用者的應用系統
- 【統計】能夠在session級別和system級別修改的oracle引數統計SessionOracle
- 關於企業級應用和web開發的區別Web
- Android Dialog風格彈出框的ActivityAndroid
- Angular 應用級別的依賴 FakeAngular
- Flutter 寫全域性彈框的心路歷程(dialog和overlay)Flutter
- 事務系統的隔離級別
- bootstrap提示和彈出框boot
- vux和iview的彈出框總結UXView
- Linux系統應用程式和核心模組的區別(轉)Linux
- recover database until cancel和 recover database區別Database
- 加框和消框,C#型別系統的核心概念 (轉)C#型別
- $(document)和$(window)區別
- 自定義彈出層.css 和 .animate的區別CSS
- window.eval()和eval()的區別
- 服務的熔斷和降級的區別
- 塊級元素和行內元素的區別
- Fescar鎖和隔離級別的理解
- 基於瀏覽器的桌面級別應用瀏覽器
- iView之Modal(一級彈窗和二級彈窗)View
- 如何處理表空間級別,表級別,索引級別的碎片索引
- Linux系統的七個執行級別Linux
- Linux 系統執行級別Linux
- Linux系統執行級別Linux
- 應用級叢集系統的設計
- Linux執行級別的檢視和修改Linux
- 單機百萬連線調優和Netty應用級別調優Netty
- 測試物件和測試級別物件
- RESTful架構和實現級別REST架構
- 級數和的估計---積分的應用
- using backup controlfile 和 until cancel區別
- using backup controlfile和 until cancel 區別
- 什麼是一級域名?一級域名和二級域名的區別是什麼?
- 彈框 在Avalonia中,使用系統預設的彈框
- 【科普】等級保護與分級保護的區別和聯絡!
- 等保二級和等保三級的三大區別講解
- 三個級別實現CRM系統的價值