本著因?yàn)轫?xiàng)目中需要做半透明的引導(dǎo)層, git上也有相應(yīng)的TourGuide開源項(xiàng)目腔呜,但是功能需求不符。為了定制所需要的界面所以我想到了用PopupWindow彈窗 半透明來實(shí)現(xiàn)了界面的引導(dǎo)層再悼。
LayoutInflater mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = mInflater.inflate(R.layout.layout_guild_worker,null);
// view.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade_ins));
popupWindow=newPopupWindow(view, LinearLayoutCompat.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT,true);
//在PopupWindow里面就加上下面代碼核畴,讓鍵盤彈出時(shí),不會(huì)擋住pop窗口冲九。
popupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
popupWindow.setFocusable(true);
ColorDrawable dw =newColorDrawable(0x00000000);
popupWindow.setBackgroundDrawable(dw);
backgroundAlpha(0.5f);
popupWindow.showAtLocation(findViewById(R.id.layout), Gravity.BOTTOM
,0,0);
popupWindow.setOnDismissListener(newPopupWindow.OnDismissListener() {
@Override
public voidonDismiss() {
backgroundAlpha(1f);
}
});
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (popupWindow.isShowing()) {
popupWindow.dismiss();
}
}
});
很快問題就來了谤草,debug運(yùn)行后跟束,一打開界面就在
popupWindow.showAtLocation(findViewById(R.id.layout), Gravity.BOTTOM,0,0);
處報(bào)錯(cuò)誤了,
1.png
百度這個(gè)問題丑孩,說的都是什么上下文生命周期的問題冀宴, 并不適用我們今天碰到的問題
解決:
findViewById(R.id.layout).post(newRunnable() {
public voidrun() {
popupWindow.showAtLocation(findViewById(R.id.layout), Gravity.BOTTOM
,0,0);
}
});
順便粘出設(shè)置背景透明度backgroundAlpha()代碼:
public voidbackgroundAlpha(floatbgAlpha) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha= bgAlpha;//0.0-1.0
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
getWindow().setAttributes(lp);
}