弹出窗口两种方法

发布时间:2015-11-02 20:17:53   来源:文档文库   
字号:

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

一、弹出PopupWindow

word/media/image2.gif

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); //后两个参数是widthheight

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); //设置layoutPopupWindow中显示的位置

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 }

word/media/image2.gif

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

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

二、Activity做伪弹窗

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

先贴上java代码——Exit.java

word/media/image2.gif

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 }

word/media/image2.gif

附上布局文件:exit_dialog.xml

word/media/image4.gifword/media/image5.gifView Code

1

2

3 android:id="@+id/exit_layout"

4 android:layout_width="280dp"

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配置:

word/media/image2.gif

1

word/media/image2.gif

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

重点1@android:color/transparent窗口背景色

重点2@nullDialogwindowFrame框为无

重点4true是否浮现在activity之上

重点5true窗口是否半透明——是(与第一条配合使用)

重点6@android:style/Animation.Dialog窗口弹出效果

重点7true 是否允许背景模糊

重点8@null这个不设置的话,可能会出现边框黑线

以上代码都是牛人们的功劳,我拿来做一分析,给更多需要的朋友。

我在众多牛人的指引下一步步成长,感谢牛人们。

本文来源:https://www.2haoxitong.net/k/doc/85890b6cf90f76c661371afe.html

《弹出窗口两种方法.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式