popup window

本人小菜一个。目前只见过两种弹出框的实现方式,第一种是最常见的PopupWindow,第二种也就是Activity的方式是前几天才见识过。感觉很霸气哦。没想到,activity也可以做伪窗口。

先贴上最常见的方法,主要讲activity的方法。

一、弹出PopupWindow

          /**
           * 弹出menu菜单
           */
           public void menu_press(){
               if(!menu_display){
                   //获取LayoutInflater实例
                   inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
                   //这里的main布局是在inflate中加入的哦,以前都是直接this.setContentView()的吧?呵呵
                   //该方法返回的是一个View的对象,是布局中的根
                  layout = inflater.inflate(R.layout.main_menu, null);

                  //下面我们要考虑了,我怎样将我的layout加入到PopupWindow中呢???很简单
                  menuWindow = new PopupWindow(layout,LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); //后两个参数是width和height
                  //menuWindow.showAsDropDown(layout); //设置弹出效果
                  //menuWindow.showAsDropDown(null, 0, layout.getHeight());

                  //设置如下四条信息,当点击其他区域使其隐藏,要在show之前配置
                  menuWindow.setFocusable(true);
                  menuWindow.setOutsideTouchable(true);
                  menuWindow.update();
                  menuWindow.setBackgroundDrawable(new BitmapDrawable());

                  mClose = (LinearLayout)layout.findViewById(R.id.menu_close);
                  menuWindow.showAtLocation(this.findViewById(R.id.schoolmain), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0,50); //设置layout在PopupWindow中显示的位置
                  //如何获取我们main中的控件呢?也很简单
                  mMainbtn = (LinearLayout)layout.findViewById(R.id.menu_main_btn);
                  mHistorybtn = (LinearLayout) layout.findViewById(R.id.menu_history_btn);
                  mHelpbtn = (LinearLayout) layout.findViewById(R.id.menu_help_btn);

                  //下面对每一个Layout进行单击事件的注册吧。。。
                  //比如单击某个MenuItem的时候,他的背景色改变
                  //事先准备好一些背景图片或者颜色
                  mMainbtn.setOnClickListener (new View.OnClickListener() {
                      @Override
                      public void onClick(View arg0) {
                          mywebView.loadUrl(URL);
                          menuWindow.dismiss(); //响应点击事件之后关闭Menu
                      }
                  });
                  mHelpbtn.setOnClickListener (new View.OnClickListener() {
                      @Override
                      public void onClick(View arg0) {
                          mywebView.loadUrl(URL);
                          menuWindow.dismiss(); //响应点击事件
                      }
                  });
                  mHistorybtn.setOnClickListener (new View.OnClickListener() {
                      @Override
                      public void onClick(View arg0) {
                          mywebView.loadUrl(URL);
                          menuWindow.dismiss(); //响应点击事件
                      }
                  });
                  menu_display = true;
              }else{
                  //如果当前已经为显示状态,则隐藏起来
                  menuWindow.dismiss();
                  menu_display = false;
              }

          }

          public void back_press(){

              if(menu_display){         //如果 Menu已经打开 ,先关闭Menu
                  menuWindow.dismiss();
                  menu_display = false;
                  }
              else {
                  Intent intent = new Intent();
                  intent.setClass(MainActivity.this,Exit.class);
                  startActivity(intent);
              }
          }

这种方法很简单,要注意的是如果要想点击其他地方使其隐藏,要在show设置四条属性如下:

// 使其聚焦 
                                mPopupWindow.setFocusable(true); 
                                // 设置允许在外点击消失 
                                mPopupWindow.setOutsideTouchable(true); 
                                //刷新状态  
                                mPopupWindow.update(); 
                                  
                                //点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作
                                mPopupWindow.setBackgroundDrawable(new BitmapDrawable());

以上文字摘自:http://www.cnblogs.com/winxiang/archive/2012/11/20/2778729.html

popup window

时间: 2024-10-16 09:31:51

popup window的相关文章

在指定控件位置弹出popup window

先看效果图 黄色的就是弹出的popup window 首先自定义一个view用来显示,文件名为layout_my_view.xml <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content

Android Popup Window 居于控件上方突出显示

public class TestPopupWindowActivity extends PopupWindow { Activity context; public TestPopupWindowActivity(Activity context, View v) { super(context); this.context = context; RelativeLayout mContentView = new RelativeLayout(context); RelativeLayout.

[XAF] Keep the DetailView open in a popup window

public class ViewController1 : ViewController { ListViewProcessCurrentObjectController controller; protected override void OnActivated() { base.OnActivated(); controller = Frame.GetController<ListViewProcessCurrentObjectController>(); controller.Cus

Android: Dragging Popup Window 可移动浮动框

final View cv = new View(this); setContentView(cv); TextView tv = new TextView(this); tv.setBackgroundColor(0xffeeeeee); tv.setTextColor(0xff000000); tv.setTextSize(24); tv.setText("click me\nthen drag me"); tv.setPadding(8, 8, 8, 8); mPopup = n

解决popup不随着window一起移动的问题

当我们设置Popup的StayOpen="True"时,会发现移动窗体或者改变窗体的Size的时候,Popup并不会跟随着一起移动位置.为了解决这个问题,可以给Popup定义一个附加属性,代码如下所示: /// <summary> /// Popup帮助类,解决Popup设置StayOpen="True"时,移动窗体或者改变窗体大小时,Popup不随窗体移动的问题 /// </summary> public class PopopHelper

window.close()提示 &quot;script may close only the windows that were opened by it&quot;

由于在脚本中使用了 window.close(), 当前非弹出窗口在最新版本的chrome和firefox里总是不能关闭,而在 IE中是可以关闭的 .在console中弹出提示"script may close only the windows that were opened by it" (脚本只能关闭它所打开的窗口), 不明白是什么原因. 研究了好几天.终于明白了问题所在. 首先,什么是非弹出窗口呢? 非弹出窗口,即是指(opener=null及非window.open()打开的

window备忘录

1.window.name属性是一个字符串,表示当前窗口的名字,只有当浏览器窗口关闭的时候,此属性才会消失. 2.window.closed属性返回一个布尔值,表示窗口是否关闭.此属性一般用来检查使用脚本打开的窗口是否关闭,如:var popup = window.open();if ((popup !== null) && !popup.closed) { // 窗口仍然打开着} 3.window.self和window.window属性都指向窗口本身,这两个属性只读. 4.window

浅谈 PHP 与手机 APP 开发(API 接口开发)

本文内容转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人 一.先简单回答两个问题: 1.PHP 可以开发客户端?答:不可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:服务端的开发.(别去纠结 GTK.WinBinder) 2.为什么选择 PHP 作为开发服务端的首选?答:跨平台(可以运行在UNIX.LINUX.WINDOWS.Mac OS下).低消耗(PHP消耗相当少的系统资源).运

Linux Skills

Linux Skills */--> Linux Skills Table of Contents 1. How to use ramdisk in Ubuntu and Fedora? 2. How to enable ssh server in Ubuntu? 3. How to disable CPU in Linux? 4. How to disable SELinux in Linux? 5. How to deal with the errors in MP3 files in Ry