PopupWindow(2)简单示例-自定义弹出菜单
2024-08-27 15:06:30
本示例,用 popupWindow 自定义弹出菜单
public class CustomActionProvider extends ActionProvider implements
OnMenuItemClickListener, OnClickListener, OnTouchListener, OnKeyListener { private final Context context;// 上下文
private View actionView;//action view private PopupWindow mPopupWindow;//popup window 里有个view,view显示的像个menu
private View mMenu; //popup window 里的显示控件 private void initPopupMenu(){ LayoutInflater lif = LayoutInflater.from(context); mMenu = lif.inflate(R.layout.custom_popup_window, null);
//不用setBackgroundDrawable的时候必须加这句才能back键和menu键退出
mMenu.setFocusableInTouchMode(true);
mMenu.setOnKeyListener(this);
mMenu.setOnTouchListener(this); mPopupWindow = new PopupWindow(mMenu,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT);
/*
* setBackgroundDrawable很重要,没有这个函数 back键和menu键关闭popwindow 很麻烦,
* 有了它以后,就不用为popwindow内的控件分别设置setOnKeyListener和setOnTouchListener了
* 可以同时支持back返回和点popwindow外面关闭popwindow,
*/
// mPopupWindow.setBackgroundDrawable(new ColorDrawable(-00000));
mPopupWindow.setFocusable(true);
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setAnimationStyle(R.anim.popwindow_anim);
mMenu.findViewById(R.id.btn1_popup_window).setOnClickListener(this);
mMenu.findViewById(R.id.btn2_popup_window).setOnClickListener(this);
mMenu.findViewById(R.id.btn3_popup_window).setOnClickListener(this);
mMenu.findViewById(R.id.btn4_popup_window).setOnClickListener(this);
mMenu.findViewById(R.id.btnClose_popup_window).setOnClickListener(this);
}
//...
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_action_view_for_costomProvider: {
mPopupWindow.showAsDropDown(v,-20,10);
}
return;
case R.id.btn4_popup_window:
case R.id.btn3_popup_window:
case R.id.btn2_popup_window:
case R.id.btn1_popup_window:
Toast.makeText(context, "popup window item clicked",
Toast.LENGTH_SHORT).show();
break;
case R.id.btnClose_popup_window:
break;
}
mPopupWindow.dismiss(); }
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
case KeyEvent.KEYCODE_MENU:
if (mPopupWindow != null && mPopupWindow.isShowing()) {
mPopupWindow.dismiss();
}
break;
}
return true;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
mPopupWindow.dismiss();
return false;
}
}
最新文章
- JS 之性能优化(1)
- mysql 高级查询
- 有关UIView、subview的几个基础知识点-IOS开发 (实例)
- Failed to create java virtue machine(不能创建java虚拟机)
- Lua 笔记
- 点击显示子菜单,离开隐藏子菜单(onmouseout下包含a标签的js解决方法)
- hbase ganglia监控配置
- CTF比赛中SQL注入的一些经验总结
- springMVC+Hibernate4+spring整合实例二(实例代码部分)
- django restframework 环境配置
- 象棋start
- test case VS test scenario
- C++.Linux下redis编程:error while loading shared libraries: libhiredis.so.0.13
- 机房收费系统——UML用例图
- C#(Winform)中button的Enable=false和visible的区别
- Android自带语音播报+讯飞语音播报封装(直接用)
- iOS 9应用开发教程之iOS 9新特性
- Java-API:java.util.regex.Pattern
- python(时间模块,序列化模块等)
- Boost Python学习笔记(五)