继续学习
PopupWindow 一定要设置 .setFocusable(true);(部分设备获取不到焦点)
final PopupWindow pop要写在Onclick()方法外!!!!
setContentView(R.layout.activity_main);
/*
* v1为需要弹出的内容
*/
LayoutInflater i = LayoutInflater.from(this);
final View v1 = i.inflate(R.layout.tips, null);
v1.setBackgroundResource(R.drawable.bg);
final Button btn = (Button) findViewById(R.id.btnPopUpWindow);
/*
* PopupWindow对象 ,传入v1内容,和布局参数
*/
final PopupWindow pop = new PopupWindow(v1,
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
findViewById(R.id.btnPopUpWindow).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
/*
* 设置显示弹窗和关闭弹窗的动画,可以省略
*/
// pop.setAnimationStyle(R.style.popwin_anim_style);
/*
* 以某一个view为参考显示
*/
// pop.showAtLocation(v1, Gravity.CENTER_VERTICAL, 0,
// 0);
/*
* 以某一个控件为参考显示
*/
pop.showAsDropDown(btn, 50, 70); // 显示弹窗
}
pop.dismiss();// 关闭弹窗
////////////////////////
style中的弹出窗口和退出窗口的动画
<style name="popwin_anim_style">
<item name="android:windowEnterAnimation">@anim/animfile</item>
<item name="android:windowExitAnimation">@anim/animgone</item>
</style>
//////////////////////// 具体使用用例
boolean clickflag = false;// 必须要在onClick(View v)外
PopupWindow pop = null; // 必须要在onClick(View v)外
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.menuBottomMenu:
if (clickflag == false) {
LayoutInflater i = LayoutInflater.from(getActivity());
View v1 = i.inflate(R.layout.testbu, null);
pop = new PopupWindow(v1, ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
pop.setHeight(window_height / 11);
pop.setFocusable(true);//必须写上,防止有的设备获取不到焦点
pop.setTouchable(true);
pop.setOutsideTouchable(true);
pop.setBackgroundDrawable(new ColorDrawable()); // 也可BitmapDrawable()
// ,必须要加
// ,使返回键和setOutsideTouchable()生效
pop.showAtLocation(menuBottomMenu, Gravity.BOTTOM, 0,
window_height / 11);
pop.update();
clickflag = true;
} else if (clickflag == true || pop != null) {
if (pop != null) {
pop.dismiss();
clickflag = false;
}
}
break;
default:
break;
}
}