彈出式窗口PopupWindow和AlertDialog
區(qū)別
- AlertDialog是非阻塞式對(duì)話框:AlertDialog彈出時(shí)所宰,后臺(tái)還可以做事情
- PopupWindow是阻塞式對(duì)話框:PopupWindow彈出時(shí),程序會(huì)等待椅挣,在PopupWindow退出前抛猖,程序一直等待橱赠,只有當(dāng)我們調(diào)用了dismiss方法的后局荚,PopupWindow退出宝踪,程序才會(huì)向下執(zhí)行
表現(xiàn)為:AlertDialog彈出時(shí),背景是黑色的税朴,但是當(dāng)我們點(diǎn)擊背景回季,AlertDialog會(huì)消失,證明程序不僅響應(yīng)AlertDialog的操作正林,還響應(yīng)其他操作茧跋,其他程序沒有被阻塞,這說(shuō)明了AlertDialog是非阻塞式對(duì)話框卓囚;PopupWindow彈出時(shí),背景沒有什么變化诅病,但是當(dāng)我們點(diǎn)擊背景的時(shí)候哪亿,程序沒有響應(yīng)粥烁,只允許我們操作PopupWindow,其他操作被阻塞
PopupWindow的學(xué)習(xí)
簡(jiǎn)單粗暴
五分鐘教你學(xué)會(huì)PopupWindow
動(dòng)畫等等很全
android的PopupWindow簡(jiǎn)解
該文章關(guān)于popup的動(dòng)畫屬性設(shè)計(jì)在 三 --> 4 關(guān)于popup的動(dòng)畫
PopupWindow的位置:
按照有無(wú)偏移分蝇棉,可以分為偏移和無(wú)偏移兩種讨阻;
-
按照參照物的不同,可以分為相對(duì)于某個(gè)控件(Anchor錨)和相對(duì)于父控件篡殷。
具體如下
showAsDropDown(View anchor):相對(duì)某個(gè)控件的位置(正左下方)钝吮,無(wú)偏移
showAsDropDown(View anchor, int xoff, int yoff):相對(duì)某個(gè)控件的位置,有偏移
showAtLocation(View parent, int gravity, int x, int y):相對(duì)于父控件的位置(例如正中央Gravity.CENTER板辽,下方Gravity.BOTTOM等)奇瘦,可以設(shè)置偏移或無(wú)偏移
AlertDialog的學(xué)習(xí)
- 默認(rèn)布局實(shí)現(xiàn)
- 自定義布局
注意自定義布局實(shí)現(xiàn)是構(gòu)造器是
AlertDialog build = new AlertDialog.Builder(this).create();```
而不是
AlertDialog.Builder builder = new AlertDialog.Builder(this);```