您好,欢迎来到尚车旅游网。
搜索
您的当前位置:首页课题_弹出窗口的两种实现方式 PopupWindow 和 Activity

课题_弹出窗口的两种实现方式 PopupWindow 和 Activity

来源:尚车旅游网
弹出窗口的两种实现方式 PopupWindow 和 Activity

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

1 /**

2 * 弹出menu菜单 3 */

4 public void menu_press(){ 5 if(!menu_display){

6 //获取LayoutInflater实例

7 inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);

8 //这里的main布局是在inflate中加入的哦,以前都是直接this.setContentView()的吧?呵呵 9 //该方法返回的是一个View的对象,是布局中的根 10 layout = inflater.inflate(R.layout.main_menu, null); 11

12 //下面我们要考虑了,我怎样将我的layout加入到PopupWindow中呢???很简单

13 menuWindow = new PopupWindow(layout,LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); //后两个参数是width和height

14 //menuWindow.showAsDropDown(layout); //设置弹出效果 15 //menuWindow.showAsDropDown(null, 0, layout.getHeight()); 16

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

19 menuWindow.setOutsideTouchable(true); 20 menuWindow.update();

21 menuWindow.setBackgroundDrawable(new BitmapDrawable()); 22

23 mClose = (LinearLayout)layout.findViewById(R.id.menu_close);

24 menuWindow.showAtLocation(this.findViewById(R.id.schoolmain), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0,50); //设置layout在PopupWindow中显示的位置 25 //如何获取我们main中的控件呢?也很简单

26 mMainbtn = (LinearLayout)layout.findViewById(R.id.menu_main_btn);

27 mHistorybtn = (LinearLayout) layout.findViewById(R.id.menu_history_btn); 28 mHelpbtn = (LinearLayout) layout.findViewById(R.id.menu_help_btn); 29

30 31

32 //下面对每一个Layout进行单击事件的注册吧。。。 33 //比如单击某个MenuItem的时候,他的背景色改变 34 //事先准备好一些背景图片或者颜色

35 mMainbtn.setOnClickListener (new View.OnClickListener() { 36 @Override

37 public void onClick(View arg0) {

38 mywebView.loadUrl(URL);

39 menuWindow.dismiss(); //响应点击事件之后关闭Menu 40 } 41 });

42 mHelpbtn.setOnClickListener (new View.OnClickListener() { 43 @Override

44 public void onClick(View arg0) { 45 mywebView.loadUrl(URL);

46 menuWindow.dismiss(); //响应点击事件 47 } 48 });

49 mHistorybtn.setOnClickListener (new View.OnClickListener() { 50 @Override

51 public void onClick(View arg0) { 52 mywebView.loadUrl(URL);

53 menuWindow.dismiss(); //响应点击事件 54 } 55 });

56 menu_display = true; 57 }else{

58 //如果当前已经为显示状态,则隐藏起来 59 menuWindow.dismiss(); 60 menu_display = false; 61 } 62 63 } 64

65 public void back_press(){ 66

67 if(menu_display){ //如果 Menu已经打开 ,先关闭Menu 68 menuWindow.dismiss(); 69 menu_display = false; 70 } 71 else {

72 Intent intent = new Intent();

73 intent.setClass(MainActivity.this,Exit.class); 74 startActivity(intent); 75 } 76 }

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

mPopupWindow.setFocusable(true); // 设置允许在外点击消失

mPopupWindow.setOutsideTouchable(true); //刷新状态

mPopupWindow.update();

//点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作 mPopupWindow.setBackgroundDrawable(new BitmapDrawable()); 二、Activity做伪弹窗

本人感觉这个很先进啊。恕我冒犯,我只这里直接写上牛人的代码。此牛人写的是防微信的demo。做的相当好,我在后面附上CSDN免费下载链接。 先贴上java代码——Exit.java

1 package cn.buaa.myweixin; 2

3 import android.app.Activity; 4 import android.os.Bundle;

5 import android.view.MotionEvent; 6 import android.view.View;

7 import android.view.View.OnClickListener; 8 import android.widget.LinearLayout; 9 import android.widget.Toast; 10

11 public class Exit extends Activity { 12

13 private LinearLayout layout; 14 @Override

15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.exit_dialog);

18 layout=(LinearLayout)findViewById(R.id.exit_layout); 19 layout.setOnClickListener(new OnClickListener() { 20

21 @Override

22 public void onClick(View v) {

23 // TODO Auto-generated method stub

24 Toast.makeText(getApplicationContext(), \"提示:点击窗口外部关闭窗口!\ 25 Toast.LENGTH_SHORT).show(); 26 } 27 }); 28 } 29

30 @Override

31 public boolean onTouchEvent(MotionEvent event){ 32 finish(); 33 return true; 34 } 35

36 public void exitbutton1(View v) { 37 this.finish(); 38 }

39 public void exitbutton0(View v) { 40 this.finish();

41 MainWeixin.instance.finish();//关闭Main 这个Activity 42 } 43 }

附上布局文件:exit_dialog.xml

1

2 5 android:layout_height=\"wrap_content\" 6 android:gravity=\"center_horizontal\" 7 android:orientation=\"vertical\"

8 android:background=\"@drawable/confirm_dialog_bg2\" > 9

10 11 android:layout_width=\"wrap_content\" 12 android:layout_height=\"wrap_content\" 13 android:layout_marginTop=\"4dp\" 14 android:padding=\"5dp\" 15 android:textColor=\"#333\" 16 android:textSize=\"20sp\" 17 android:text=\"退出微信\" /> 18

19 20 android:layout_width=\"wrap_content\" 21 android:layout_height=\"wrap_content\" 22 android:textColor=\"#333\"

23 android:layout_marginTop=\"1dp\" 24 android:padding=\"10dp\" 25 android:textSize=\"16sp\"

26 android:gravity=\"center_horizontal\"

27 android:text=\"退出后,你将收不到新的消\\n息.确定要退出?\" /> 28 29

30 31 android:layout_width=\"wrap_content\"

32 android:layout_height=\"wrap_content\" 33 android:layout_marginTop=\"33dp\" 34 android:layout_marginBottom=\"8dp\" 35 > 36

37 38 android:id=\"@+id/exitBtn0\" 39 android:layout_width=\"110dp\"

40 android:layout_height=\"wrap_content\" 41 android:text=\"是\"

42 android:textSize=\"16sp\" 43 android:textColor=\"#fff\"

44 android:background=\"@drawable/btn_style_green\" 45 android:gravity=\"center\"

46 android:onClick=\"exitbutton0\" 47 /> 48

49 50 android:id=\"@+id/exitBtn1\" 51 android:layout_width=\"110dp\"

52 android:layout_height=\"wrap_content\" 53 android:layout_marginLeft=\"10dp\" 54 android:text=\"否\"

55 android:textSize=\"16sp\" 56 android:textColor=\"#333\"

57 android:background=\"@drawable/btn_style_white\" 58 android:gravity=\"center\"

59 android:onClick=\"exitbutton1\" 60 />

61

62

63

分析,弹出exit这个框很简单,本身就是activity,在主界面用startavtivity等方法像普通activity启动。 关键是如何做到点击其他地方退出和如何关闭程序。

1、点击其他地方退出,只要监听OnClickListener让所有的点击都退出就行了(除了xml中指定按钮事件之外)。

2、退出主程序。只要在出程序中将主程序自己设置成静态对象,在外部调用即可 public static MainWeixin instance=null; 上面的布局和activity并不能将activity的窗体展现在主界面之上,看起来像个弹出框。下面是弹出框的styles配置:

1

下面我们来分析一下这个布局的含义及重点:

重点1、@android:color/transparent窗口背景色 重点2、@nullDialog的windowFrame框为无 重点4、true是否浮现在activity之上

重点5、true窗口是否半透明——是(与第一条配合使用) 重点6、@android:style/Animation.Dialog窗口弹出效果 重点7、true 是否允许背景模糊

重点8、@null这个不设置的话,可能会出现边框黑线 以上代码都是牛人们的功劳,我拿来做一分析,给更多需要的朋友。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sceh.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务