Android PopupWindow使用,下拉式PopupWindow,底部式PopupWindow

1、实现方法1                                        仿微信盆友圈弹出点赞、评论

   

demo连接:android开发PopupWindow实现跟随试弹出框-Android文档类资源-CSDN下载

实现步骤

1、下载module并引入项目

引入module步骤:Android studio 导入module方法_meixi_android的博客-CSDN博客_as怎么导入module

2、实现方法2

1、封装弹出窗类

/*** 作者:created by meixi* 邮箱:13164716840@163.com* 日期:2018/10/26 15*/public abstract class CommonPopupWindow {protected Context context;protected View contentView;protected PopupWindow mInstance;public CommonPopupWindow(Context c, int layoutRes, int w, int h) {context=c;contentView= LayoutInflater.from(c).inflate(layoutRes, null, false);initView();initEvent();mInstance=new PopupWindow(contentView, w, h, true);initWindow();}public View getContentView() { return contentView; }public PopupWindow getPopupWindow() { return mInstance; }protected abstract void initView();protected abstract void initEvent();protected void initWindow() {mInstance.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));mInstance.setOutsideTouchable(true);
//        mInstance.setTouchable(true);}public void showBashOfAnchor(View anchor, LayoutGravity layoutGravity, int xmerge, int ymerge) {int[] offset=layoutGravity.getOffset(anchor, mInstance);mInstance.showAsDropDown(anchor, offset[0]+xmerge, offset[1]+ymerge);}public void showAsDropDown(View anchor, int xoff, int yoff) {mInstance.showAsDropDown(anchor, xoff, yoff);}public void showAtLocation(View parent, int gravity, int x, int y) {mInstance.showAtLocation(parent, gravity, x, y);}public static class LayoutGravity {private int layoutGravity;// waring, don't change the order of these constants!public static final int ALIGN_LEFT=0x1;public static final int ALIGN_ABOVE=0x2;public static final int ALIGN_RIGHT=0x4;public static final int ALIGN_BOTTOM=0x8;public static final int TO_LEFT=0x10;public static final int TO_ABOVE=0x20;public static final int TO_RIGHT=0x40;public static final int TO_BOTTOM=0x80;public static final int CENTER_HORI=0x100;public static final int CENTER_VERT=0x200;public LayoutGravity(int gravity) {layoutGravity=gravity;}public int getLayoutGravity() { return layoutGravity; }public void setLayoutGravity(int gravity) { layoutGravity=gravity; }public void setHoriGravity(int gravity) {layoutGravity&=(0x2+0x8+0x20+0x80+0x200);layoutGravity|=gravity;}public void setVertGravity(int gravity) {layoutGravity&=(0x1+0x4+0x10+0x40+0x100);layoutGravity|=gravity;}public boolean isParamFit(int param) {return (layoutGravity & param) > 0;}public int getHoriParam() {for(int i=0x1; i<=0x100; i=i<<2)if(isParamFit(i))return i;return ALIGN_LEFT;}public int getVertParam() {for(int i=0x2; i<=0x200; i=i<<2)if(isParamFit(i))return i;return TO_BOTTOM;}public int[] getOffset(View anchor, PopupWindow window) {int anchWidth=anchor.getWidth();int anchHeight=anchor.getHeight();int winWidth=window.getWidth();int winHeight=window.getHeight();View view=window.getContentView();if(winWidth<=0)winWidth=view.getWidth();if(winHeight<=0)winHeight=view.getHeight();int xoff=0;int yoff=0;switch (getHoriParam()) {case ALIGN_LEFT:xoff=0; break;case ALIGN_RIGHT:xoff=anchWidth-winWidth; break;case TO_LEFT:xoff=-winWidth; break;case TO_RIGHT:xoff=anchWidth; break;case CENTER_HORI:xoff=(anchWidth-winWidth)/2; break;default:break;}switch (getVertParam()) {case ALIGN_ABOVE:yoff=-anchHeight; break;case ALIGN_BOTTOM:yoff=-winHeight; break;case TO_ABOVE:yoff=-anchHeight-winHeight; break;case TO_BOTTOM:yoff=0; break;case CENTER_VERT:yoff=(-winHeight-anchHeight)/2; break;default:break;}return new int[]{ xoff, yoff };}}
}

外部不可点击

mInstance.setOutsideTouchable(false);
mInstance.setFocusable(false);

2、activity调用代码

(1)下拉式弹出

private CommonPopupWindow.LayoutGravity layoutGravity;private CommonPopupWindow window;
private View activityPopup;
activityPopup=findViewById(R.id.activity_popup);
        textView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {PopupWindow win=window.getPopupWindow();win.setAnimationStyle(R.style.animTranslate);//动画效果window.showBashOfAnchor(textView, layoutGravity, 0, 0);//跟随式弹出
//                window.showAtLocation(activityPopup, Gravity.BOTTOM, 0, 0);//底部弹出WindowManager.LayoutParams lp=getWindow().getAttributes();lp.alpha=0.3f;getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);getWindow().setAttributes(lp);}});

下拉式实例化

private void initPopup2(){layoutGravity=new CommonPopupWindow.LayoutGravity(CommonPopupWindow.LayoutGravity.CENTER_HORI| CommonPopupWindow.LayoutGravity.TO_BOTTOM);DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);int nMultiple = dm.widthPixels;//宽window=new CommonPopupWindow(this, R.layout.mypopup, (int) (nMultiple*0.4), ViewGroup.LayoutParams.WRAP_CONTENT) {@Overrideprotected void initView() {View view=getContentView();linearLayout =(LinearLayout)view.findViewById(R.id.oneli);}@Overrideprotected void initEvent() {linearLayout.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(MainActivity.this,"ssssblue",Toast.LENGTH_SHORT).show();}});}@Overrideprotected void initWindow() {super.initWindow();PopupWindow instance=getPopupWindow();instance.setOnDismissListener(new PopupWindow.OnDismissListener() {@Overridepublic void onDismiss() {WindowManager.LayoutParams lp=getWindow().getAttributes();lp.alpha=1.0f;getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);getWindow().setAttributes(lp);}});}};
}

(2)底部弹出

    private void initPopupWindow() {DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);int nMultiple = dm.widthPixels;//宽//        window=new CommonPopupWindow(this, R.layout.mypopup, ViewGroup.LayoutParams.MATCH_PARENT, (int) (screenHeight*0.7)) {window=new CommonPopupWindow(this, R.layout.mypopup, (int) (nMultiple*0.9), ViewGroup.LayoutParams.WRAP_CONTENT) {@Overrideprotected void initView() {View view=getContentView();linearLayout =(LinearLayout)view.findViewById(R.id.oneli);}@Overrideprotected void initEvent() {linearLayout.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(MainActivity.this,"ssssblue",Toast.LENGTH_SHORT).show();}});}@Overrideprotected void initWindow() {super.initWindow();PopupWindow instance=getPopupWindow();instance.setOnDismissListener(new PopupWindow.OnDismissListener() {@Overridepublic void onDismiss() {WindowManager.LayoutParams lp=getWindow().getAttributes();lp.alpha=1.0f;getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);getWindow().setAttributes(lp);}});}};}

  window.getPopupWindow().dismiss();//隐藏

demo链接:PopupWindow实现demo-Android代码类资源-CSDN下载

下拉式弹出窗                                              全屏底部弹出窗

         

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作197:判断对象里面是否有0和1

<el-form-item v-if"property.includes(0)" prop"business_module" label"所属栏目" :label-width"formLabelWidth"><!--注意用户的返回值--><el-select v-model"form.business_module" placeholder"…

Python __call__()方法

Python 类中一个非常特殊的实例方法&#xff0c;即 call()。该方法的功能类似于在类中重载 () 运算符&#xff0c;使得类实例对象可以像调用普通函数那样&#xff0c;以“对象名()”的形式使用。 举个例子&#xff1a; class CLanguage:# 定义__call__方法def __call__(self,n…

Android 微信登录

/1、首先你得到微信.开放平台申请开发权限&#xff1a;https://open.weixin.qq.com/ 申请通过效果如下即可 2、其次&#xff0c;阅读开发文档&#xff1a; https://open.weixin.qq.com/cgi-bin/showdocument?actiondir_list&tresource/res_list&verify1&idopen1…

解决ubuntu16.04 qt5.9.1无法输入中文

1. 安装 fcitx-frontend-qt5 sudo apt-get install fcitx-frontend-qt5 2. 确认该路径下存在的文件 /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so 3. 将libfcitxplatforminputcontextplugin.so 复制到以下两个路径下&…

工作198:无法选中的状态一定要绑定在select上面

<el-form-item prop"department_id" label"所属部门" :label-width"formLabelWidth"><select-form change"DepartmentList" v-model"form.department_id" /></el-form-item><el-form-item v-show&quo…

惊天大神坑 关于 python-socketio 与 socket.io-client 版本兼容问题

在使用fastapi进行开发中&#xff0c;使用python-socketio作为socketi库&#xff0c;前端项目使用vue开发&#xff0c;配合socket.io-client作为client端。 我的python-socketio版本号为4.6.0 前端socket.io-client我默认安装的最新的&#xff0c;此时最新的是3.0.4,但是发现…

vscode 1.9.11 和pycharm 5.0.4 输入os.getcwd()后输出不相同

各位&#xff0c;vscode的坑&#xff1b; os.getcwd()获取当前文件的位置 例如文件目录级&#xff1a; g:\test\123 vscode 输出的是父目录的位置 实际输出的结果为&#xff1a;g:\test 预期结果:g:\test\123&#xff08;这个才是正确的&#xff09; pycharm os.getcwd() 输出…

Bitmap添加文字水印

private static Bitmap AddTimeWatermark(Bitmap mBitmap) {//获取原始图片与水印图片的宽与高int mBitmapWidth mBitmap.getWidth();int mBitmapHeight mBitmap.getHeight();Bitmap mNewBitmap Bitmap.createBitmap(mBitmapWidth, mBitmapHeight, Bitmap.Config.ARGB_8888)…

工作199:获取接口token

1第一步设置token getAction("/user/info").then(res>{Vue.ls.set(Set_Token,res.data.access_token)}) 2第二步 设置token serviceXing.interceptors.request.use(function (config) {// Do something before request is sent//window.localStorage.getItem(&…

mongoose查找若存在,则什么都不做,若不存在,则插入

直接上代码&#xff1a; ModelSchema.findOneAndUpdate( {id: searchId}, { $setOnInsert: {id: searchId,foo: foo,bar: bar,} }, { upsert: true }) .catch(error > console.error(error));

Android 启动白屏,简单解决方法

1、打开styles、找到ThemeSplash&#xff0c;或者AppTheme 添加windowBackground即可/windowFullscreen是满屏属性。可去掉 也就是添加启动背景图 <style name"ThemeSplash" parent"Theme.AppCompat.Light.NoActionBar"><item name"android…

工作200:视频上传和图片编辑功能

1眼睛一定要看清 本地接口 稳得很

highcharts x轴 按照时间 datetime排序

1、我的配置文件代码&#xff1a; var chart Highcharts.chart(warningCharts, {chart: {type: line,},style: {fontSize: 12px,color: #006cee,padding: 10rpx,},title: {text: null,},subtitle: {text: null,},series: data,xAxis: {type: datetime,dateTimeLabelFormats: …

Android 起调系统功能,打开系统浏览器,拨打电话,发送短信,手机震动,跳转到设置通知开关页面

1、打开系统浏览器 try {startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/jaredrummler/MaterialSpinner"))); } catch (ActivityNotFoundException ignored) { } 2、拨打电话 Intent intent new Intent(Intent.ACTION_DIAL, Uri.pa…

B. 重载技术(overloading)

转载于:https://www.cnblogs.com/youyuanjuyou/p/8120968.html

Highchart series一次只显示一条

核心代码如下&#xff1a; plotOptions: {series: {events: {show: function () {const chart this.chartconst series chart.serieslet i series.lengthlet otherSerieswhile (i--) {otherSeries series[i];if (otherSeries ! this && otherSeries.visible) {oth…

android xml中设置水平虚线及竖直虚线

水平线背景 <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android"android:shape"line"><strokeandroid:width"1dp"android:color"color/colorA…

highcharts默认选中最后一个点数据

效果图如下&#xff1a; 核心代码如下&#xff1a; chart: {type: line,events: {load: function () {let chart thisconst points []Highcharts.each(chart.series, function (s) {if (s.visible) {points.push(s.points[s.points.length - 1])}})chart.tooltip.refresh(p…

Ajax——php基础知识(二)

header header(content-type:text/html; charset utf-8);//设置编码格式为:utf-8 header(location:http://www.baidu.com);//设置跳转到百度首页 header(refresh:3; urlhttp://www.xiaomi.com);//设置页面间隔刷新 数据类型 <?phpheader("content-type:text/html;char…