弹出窗口两种方法

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

先贴上最常见的方法,主要讲activity的方法。一、弹出PopupWindow1/**2*弹出menu菜单3*/4publicvoidmenu_press(){5if(!menu_display){6//获取LayoutInflater实例7inflater=(LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);8//这里的main布局是在inflate中加入的哦,以前都是直接this.setContentView()的吧?呵呵9//该方法返回的是一个View的对象,是布局中的根10layout=inflater.inflate(R.layout.main_menu,null);1112//下面我们要考虑了,我怎样将我的layout加入到PopupWindow中呢???很简单13menuWindow=newPopupWindow(layout,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);//后两个参数是width和height14//menuWindow.showAsDropDown(layout);//设置弹出效果15//menuWindow.showAsDropDown(null,0,layout.getHeight());1617//设置如下四条信息,当点击其他区域使其隐藏,要在show之前配置18menuWindow.setFocusable(true);19menuWindow.setOutsideTouchable(true);20menuWindow.update();21menuWindow.setBackgroundDrawable(newBitmapDrawable());2223mClose=(LinearLayout)layout.findViewById(R.id.menu_close);24menuWindow.showAtLocation(this.findViewById(R.id.schoolmain),Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL,0,50);//设置layout在PopupWindow中显示的位置25//如何获取我们main中的控件呢?也很简单26mMainbtn=(LinearLayout)layout.findViewById(R.id.menu_main_btn);27mHistorybtn=(LinearLayout)layout.findViewById(R.id.menu_history_btn);28mHelpbtn=(LinearLayout)layout.findViewById(R.id.menu_help_btn);29303132//下面对每一个Layout进行单击事件的注册吧。。。33//比如单击某个MenuItem的时候,他的背景色改变34//事先准备好一些背景图片或者颜色35mMainbtn.setOnClickListener(newView.OnClickListener(){36@Override37publicvoidonClick(Viewarg0){38mywebView.loadUrl(URL);39menuWindow.dismiss();//响应点击事件之后关闭Menu40}41});42mHelpbtn.setOnClickListener(newView.OnClickListener(){43@Override44publicvoidonClick(Viewarg0){45mywebView.loadUrl(URL);46menuWindow.dismiss();//响应点击事件47}48});49mHistorybtn.setOnClickListener(newView.OnClickListener(){50@Override51publicvoidonClick(Viewarg0){52mywebView.loadUrl(URL);53menuWindow.dismiss();//响应点击事件54}55});56menu_display=true;57}else{58//如果当前已经为显示状态,则隐藏起来59menuWindow.dismiss();60menu_display=false;61}6263}6465publicvoidback_press(){6667if(menu_display){//如果Menu已经打开,先关闭Menu68menuWindow.dismiss();69menu_display=false;70}71else{72Intentintent=newIntent();73intent.setClass(MainActivity.this,Exit.class);74startActivity(intent);75}76}这种方法很简单,要注意的是如果要想点击其他地方使其隐藏,要在show设置四条属性如下://使其聚焦mPopupWindow.setFocusable(true);//设置允许在外点击消失mPopupWindow.setOutsideTouchable(true);//刷新状态mPopupWindow.update();//点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener,设置其他控件变化等操作mPopupWindow.setBackgroundDrawable(newBitmapDrawable());二、Activity做伪弹窗本人感觉这个很先进啊。恕我冒犯,我只这里直接写上牛人的代码。此牛人写的是防微信的demo。做的相当好,我在后面附上CSDN免费下载链接。先贴上java代码——Exit.java1packagecn.buaa.myweixin;23importandroid.app.Activity;4importandroid.os.Bundle;5importandroid.view.MotionEvent;6importandroid.view.View;7importandroid.view.View.OnClickListener;8importandroid.widget.LinearLayout;9importandroid.widget.Toast;1011publicclassExitextendsActivity{1213privateLinearLayoutlayout;14@Override15protectedvoidonCreate(BundlesavedInstanceState){16super.onCreate(savedInstanceState);17setContentView(R.layout.exit_dialog);18layout=(LinearLayout)findViewById(R.id.exit_layout);19layout.setOnClickListener(newOnClickListener(){2021@Override22publicvoidonClick(Viewv){23//TODOAuto-generatedmethodstub24Toast.makeText(getApplicationContext(),提示:点击窗口外部关闭窗口!,25Toast.LENGTH_SHORT).show();26}27});28}2930@Override31publicbooleanonTouchEvent(MotionEventevent){32finish();33returntrue;34}3536publicvoidexitbutton1(Viewv){37this.finish();38}39publicvoidexitbutton0(Viewv){40this.finish();41MainWeixin.instance.finish();//关闭Main这个Activity42}43}附上布局文件:exit_dialog.xmlViewCode分析,弹出exit这个框很简单,本身就是activity,在主界面用startavtivity等方法像普通activity启动。关键是如何做到点击其他地方退出和如何关闭程序。1、点击其他地方退出,只要监听OnClickListener让所有的点击都退出就行了(除了xml中指定按钮事件之外)。2、退出主程序。只要在出程序中将主程序自己设置成静态对象,在外部调用即可publicstaticMainWeixininstance=null;上面的布局和activity并不能将activity的窗体展现在主界面之上,看起来像个弹出框。下面是弹出框的styles配置:1stylename=MyDialogStyle2itemname=android:windowBackground@android:color/transparent/item3itemname=android:windowFrame@null/item4itemname=android:windowNoTitletrue/item5itemname=android:windowIsFloatingtrue/item6itemname=android:windowIsTranslucenttrue/item7itemname=android:windowContentOverlay@null/item8itemname=android:windowAnimationStyle@android:style/Animation.Dialog/item9itemname=android:backgroundDimEnabledtrue/item10/style下面我们来分析一下这个布局的含义及重点:重点1、itemname=android:windowBackground@android:color/transparent/item窗口背景色重点2、itemname=android:windowFrame@null/itemDialog的windowFrame框为无重点4、itemname=android:windowIsFloatingtrue/item是否浮现在activity之上重点5、itemname=android:windowIsTranslucenttrue/item窗口是否半透明——是(与第一条配合使用)重点6、itemname=android:windowAnimationStyle@android:style/Animation.Dialog/item窗口弹出效果重点7、itemname=android:backgroundDimEnabledtrue/item是否允许背景模糊重点8、itemname=android:windowContentOverlay@null/item这个不设置的话,可能会出现边框黑线以上代码都是牛人们的功劳,我拿来做一分析,给更多需要的朋友。我在众多牛人的指引下一步步成长,感谢牛人们。

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功