Android开发:PopupWindow实现底部弹出框

Android自定义底部弹出窗-dialog(2种实现分析+源码) Android自定义底部弹出窗-dialog 上线项目功能抽取,在项目开发中,我们会在许多地方会用到底部自定义弹窗,比如设置:个人账户退出,切换,照片的拍照或者相册的调出,或者一些底部弹出列表,本文对自定义底部弹出窗-dialog,做个开发记录,希望对读者有所帮助. 本文实现的抽取的代码实例:安卓两种底部弹出窗dialog实现方式,一种是列表弹窗实现,2是灵活底部弹窗,传入布局以及控件id 实... 阅读详情

项目中需要在某一页实现底部弹出框,于是结合了网上的底部弹出框,自己做了个弹出窗,有点难看,可以根据自己的需要更具体的美化

效果图:

 

接下来,我们来实现此功能:

直接上代码吧!

1、在点击某个按钮,进行触发,弹出底部框

/**

     * 创建popupWindow

     *popupWindow 是全局定义的,根据自己需要惊醒定义
     * @param view View 比如:btn_ok的点击后触发popupWindow,则view就是id为btn_ok对应的view
     */
    private void bottomwindow(View view) {
        if (popupWindow != null && popupWindow.isShowing()) {
            return;
        }
        LinearLayout layout = (LinearLayout) getLayoutInflater().inflate(R.layout.pop_five_activity_bottom_layout, null);
        popupWindow = new PopupWindow(layout,
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
        //点击空白处时,隐藏掉pop窗口
        popupWindow.setFocusable(true);
        popupWindow.setBackgroundDrawable(new BitmapDrawable());
        //添加弹出、弹入的动画
//        popupWindow.setAnimationStyle(R.style.Popupwindow);
        int[] location = new int[2];
        view.getLocationOnScreen(location);
        popupWindow.showAtLocation(view, Gravity.LEFT | Gravity.BOTTOM, 0, -location[1]);
        //添加按键事件监听
        setButtonListeners(layout);
        //添加pop窗口关闭事件,主要是实现关闭时改变背景的透明度
//        popupWindow.setOnDismissListener(new poponDismissListener());
//        backgroundAlpha(1f);
    }

/**

     * 设置popupWindow布局中按钮的点击事件

     *p
     * @param view View
     */
    private void setButtonListeners(LinearLayout layout) {
        Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel);
        Button btn_ok = (Button) layout.findViewById(R.id.btn_ok);
        final EditText et_lat = layout.findViewById(R.id.et_lat);
        final EditText et_lng = layout.findViewById(R.id.et_lng);
        final TextView tv_showResult = layout.findViewById(R.id.tv_showResult);


        btn_cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (popupWindow != null && popupWindow.isShowing()) {
                    //在此处添加你的按键处理 xxx
                    popupWindow.dismiss();
                }
            }
        });
        btn_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (popupWindow != null && popupWindow.isShowing()) {
                    //在此处添加你的按键处理 xxx
                    String lat = et_lat.getText().toString().trim();
                    String lng = et_lng.getText().toString().trim();
                    if (TextUtils.isEmpty(lat) || TextUtils.isEmpty(lng)) {
                        Toast.makeText(FiveActivity.this, "请填写经纬度", Toast.LENGTH_SHORT).show();
                    } else {
                        long startTime = System.currentTimeMillis();
                        Log.i("startTime:", startTime + "");
                        Double resultDistance = 0.0;
                        Double distance;
                        LatLng startPoint = new LatLng(Double.parseDouble(lat), Double.parseDouble(lng));
                        List<LatLngDB> latLngDBList = DataSupport.findAll(LatLngDB.class);
                        int i = 0;
                        for (LatLngDB latLngDB : latLngDBList) {
                            Log.i("次数:", "" + i);
                            i++;
                            //计算p1、p2两点之间的直线距离,单位:米
                            LatLng endPoint = new LatLng(latLngDB.getLat(), latLngDB.getLng());
                            distance = DistanceUtil.getDistance(startPoint, endPoint);
                            Log.i("距离:", "" + distance);
                            if (resultDistance < distance) {
                                resultDistance = distance;
                            }
                        }
                        long endTime = System.currentTimeMillis();
                        Log.i("endTime:", endTime + "");
                        long timeCha = endTime - startTime;
                        Toast.makeText(FiveActivity.this, "---" + timeCha + "ms", Toast.LENGTH_SHORT).show();
                        int minute = (int) (timeCha / 60) % 60;
                        int second = (int) (timeCha % 60);
                        if (minute < 10 && second < 10) {
                            tv_showResult.setText("用时 0" + minute + ":0" + second + ";最远距离:" + resultDistance);
                        } else if (minute < 10 && second >= 10) {
                            tv_showResult.setText("用时 0" + minute + ":" + second + ";最远距离:" + resultDistance);
                        } else if (minute >= 10 && second < 10) {
                            tv_showResult.setText("用时 " + minute + ":0" + second + ";最远距离:" + resultDistance);
                        } else if (minute >= 10 && second >= 10) {
                            tv_showResult.setText("用时 " + minute + ":" + second + ";最远距离:" + resultDistance);
                        }
                    }
                }
            }
        });

 

    }

 

 

2、pop_five_activity_bottom_layout  xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/pop_view_bg"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_cancel"
            android:layout_width="wrap_content"
            android:layout_height="@dimen/view_height_25"
            android:layout_margin="@dimen/margin_5"
            android:background="@drawable/pop_add_sub_good_cancel_bg"
            android:text="取消"
            android:textColor="@color/red"
            android:textSize="@dimen/fontsize_12" />

        <View
            android:layout_width="0dp"
            android:layout_height="@dimen/view_height_25"
            android:layout_weight="1" />

        <Button
            android:id="@+id/btn_ok"
            android:layout_width="wrap_content"
            android:layout_height="@dimen/view_height_25"
            android:layout_margin="@dimen/margin_5"
            android:background="@drawable/pop_add_sub_good_cancel_bg"
            android:text="确定"
            android:textColor="@color/red"
            android:textSize="@dimen/fontsize_12" />
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_margin="@dimen/margin_5"
        android:background="@drawable/pop_view_bg" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="@dimen/margin_10">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center_vertical"
            android:text="(" />

        <EditText
            android:id="@+id/et_lng"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="bottom"
            android:hint="经度值" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="bottom"
            android:text="," />

        <EditText
            android:id="@+id/et_lat"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="bottom"
            android:hint="纬度值" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center_vertical"
            android:text=")" />
    </LinearLayout>

    <TextView
        android:id="@+id/tv_showResult"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="@dimen/margin_10"
        android:textColor="@color/black"
        android:textStyle="bold" />
 

</LinearLayout>

 

3、pop_view_bg 资源文件,在res文件 > 右击 > new > Android resource file > Resource Type 选择 Drawable

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke
        android:width="0.5dp"
        android:color="@color/red"
        android:dashGap="2dp"
        android:dashWidth="4dp" />
    <solid android:color="#F0F0F0" />

</shape>

 

4、pop_add_sub_good_cancel_bg 资源文件,步骤同 3

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/white" />
    <stroke
        android:width="1dp"
        android:color="@color/red" />
    <corners android:radius="2dp" />

</shape>

 

5、pop_view_bg 资源文件,步骤同 3

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke
        android:width="0.5dp"
        android:color="@color/red"
        android:dashGap="2dp"
        android:dashWidth="4dp" />
    <solid android:color="#F0F0F0" />

</shape>

 

6、到此,底部弹出框就实现了

 

 

Android---底部弹窗之BottomSheetDialog 通过BottomSheetDialog简单实现底部弹窗。比如,经常用到的更换头像操作。 阅读详情

相关推荐

Android 底部弹出提示框的解决办法(使用Activity以及PopupWindow)

本片文章主要谈探讨了如何实现在底部弹出提示框背景为半透明效果的实现。想要实现此种效果一般有两种方式一个是使用Activity设置Theme另一种方式就是使用PopupWindow设置样式实现效果。 一,使用Activity 首先是此activity的布局文件: <RelativeLayout xmlns:android="http://schemas.android.com

bufanni12的专栏 6064

Android之PopupWindow制作底部弹窗

先创建一个底部弹窗的资源文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="#fff" android:layout_height="match..

maoyusan的博客 972

Android PopupWindow实现右侧、左侧和底部弹出菜单

主要为大家详细介绍了Android PopupWindow实现右侧、左侧和底部弹出菜单的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Android 基于BottomSheetDialog 自定义底部弹出Dialog

前言 BottomSheetDialog 是 Android 6.0 推出的新控件,即 Base class for Dialogs styled as a bottom sheet 基于Dialog样式的一个底部对话框 但原生控件可扩展性往往满足不了日常开发,于是自己基于它自定义一个Dialog,使用方便,可扩展性高 一、效果 二、使用步骤 1.引入库 implementation 'androidx.recyclerview:recyclerview:1.1.0' 2.代码

X_sunmmer的博客 9615

【强化学习】常用算法之一 “A3C”

A3C(Asynchronous Advantage Actor-Critic)算法是一种在强化学习领域中应用广泛的算法,它结合了策略梯度方法和价值函数的学习,用于近似解决马尔可夫决策过程(Markov Decision Process)问题。A3C算法在近年来备受关注,因为它在处理大规模连续动作空间和高维状态空间方面具有出色的性能。A3C算法是一种基于策略梯度的强化学习算法,通过多个并行的智能体异步地与环境交互,并利用Actor和Critic网络实现策略和价值的近似,从而实现快速而稳定的强化学习训练。

Code_and516的博客 6756

【汽车ECU标定技术解析】DCM文件与A2L、HEX的协同工作机制

本文深入解析了汽车ECU标定中DCM、A2L与HEX三大核心文件的协同工作机制。A2L文件作为定义标定变量地址与规则的“图纸”,DCM文件承载工程师调试后的具体标定数据,最终通过A2L的地址映射,将DCM数据固化生成可刷入ECU的HEX文件,形成完整的标定数据流转闭环。

weixin_29214559的博客 436

android PopupWindow详解

在 android开发中,我们经常要用到PopupWindow来实现一些弹出框的效果,那什么时候用PopupWindow,什么时候用AlertDialog呢?PopupWindow与AlertDialog的区别在于AlertDialog显示在固定的屏幕中间位置,而popupWindow可以自己设置显示位置。      popupwindow有两种确定位置的方式: 1.showAsDropDow

lb1207087645的博客 825

openwrt编译及第一个安装包教程

Date: 2017.03.14 Made:SuperDeverloper Email: na1206@live.com Target: For mt7688 based board说明:本人在学习过程中走了不少弯路,希望本文档能为后来者提供便利。欢迎复制和使用本文档。本文档记录了搭建openwrt编译环境以及快速创建ipk包(openwrt上的安装程序)。本文档在实际应用中做过几次修改,以帮

SuperDevloper的博客 1万+

Android实现底部半透明弹出框PopUpWindow

Android底部半透明弹出框PopUpWindowlayout布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" an

yzppp 1887

从IR Drop到EM分析:数字IC电源规划中那些没人明说的细节(以MTCMOS配置为例)

本文深入探讨数字IC后端设计中电源规划的关键细节,特别关注MTCMOS配置、电源网络电阻最小化和level shifter供电等实战技巧。通过分析IR Drop和EM问题,提供优化floorplan和powerplan的具体策略,帮助工程师避免常见陷阱,提升芯片设计的稳定性和可靠性。

q9w8e7r6t5的博客 511

告别手动配置!用Vector vLinkGen 2.1.0自动生成AUTOSAR链接脚本(附bss段配置详解)

本文详细介绍了如何使用Vector vLinkGen 2.1.0工具自动生成AUTOSAR链接脚本,告别繁琐的手动配置。通过解析vLinkGen的核心架构和bss段配置实践,帮助开发者提升嵌入式软件开发效率,支持多种主流编译器,实现精确的内存分配和初始化策略。

weixin_28716181的博客 376

Android:popupwindow实现底部弹窗实例

Android:popupwindow实现底部弹窗实例 一、PopupWindow这个类用来实现一个弹出框,可以使用任意布局的View作为其内容,这个弹出框是悬浮在当前activity之上的。 二、实例测试。 1、在res目录下新建anim目录,在anim目录下建两个动画效果文件popshow_anim.xml和pophidden_anim.xml,用来控制菜单的弹出和隐藏。里面的是配置菜单弹出时的效果, translate 位置转移动画效果...

海月汐辰 2990

自抗扰控制(ADRC)理论与工程实践:8.2 模糊ADRC、神经网络ADRC等智能融合变体

智能融合ADRC变体概述 自抗扰控制(ADRC)与智能控制方法(如模糊逻辑、神经网络)的融合,旨在突破传统ADRC在非线性、时变系统中的应用局限。智能融合ADRC主要通过以下方式实现性能提升: 模糊ADRC 参数自整定:利用模糊推理在线调节ADRC带宽参数,实现自适应控制。 非线性反馈:用模糊控制器替代线性PD,灵活设计非线性控制策略。 优势:融入专家经验,无需精确模型;局限:依赖规则库设计,稳定性分析困难。 神经网络ADRC 增强ESO:用神经网络学习扰动动态,提高估计精度。

技术工作者 226

Android之带遮罩层的弹出框—popUpWindow

上次项目中实现了新功能,就一直想添加到博客里来着,惰性发作起来简直太可怕,不说了,跟着一起写吧,三步即可实现简单的弹出框功能,首先看效果—— 首先:主页面布局,触发控件一定要有,再有就是给根标签设置id <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="

Fairy_1126的博客 5350

Python 爬虫实战:爬取今日头条文章与阅读量数据

本文详细介绍了基于Python爬取今日头条文章与阅读量数据的完整方案。通过分析今日头条API接口,采用Requests+正则表达式技术实现数据抓取,重点解决加密参数构造、请求头模拟、反爬规避等核心问题。文章包含文章列表获取、详情数据提取、互动数据采集等完整流程,并提供数据存储与基础分析方法。同时强调合规使用爬虫技术,控制爬取频率,避免干扰平台运营。该方案可为内容传播分析、用户兴趣研究提供数据支持,但需注意接口参数更新和反爬机制变化,适时调整代码实现。

2503_91057718的博客 2519

lammps教程:官方自带eam_database程序拟合EAM势方法介绍

使用lammps模拟金属体系,最常用的势函数为eam、meam势。 对于大多数金属或者合金来说,可以从网上下载相对应的eam或meam势力场文件。 而对于一些新的合金材料,可能就找不到相对应的力场文件。 解决的方法有两种,一是采用混合势(pair_style hybrid),第二种方法是自己拟合势函数文件。 混合势的写法在前面文章中已经介绍过,本文介绍一种拟合EAM势的方法。 该方法是运行Xiaowang Zhou编写的一个拟合程序,该程序可自动生成所需要的合金势。 这个程序能够拟合的合金元素有: Cu,

lammps_jiayou的博客 4613

android 列表底部弹出框,Android 底部弹出提示框的解决办法(使用Activity以及PopupWindow)...

本片文章主要谈探讨了如何实现在底部弹出提示框背景为半透明效果的实现。想要实现此种效果一般有两种方式一个是使用Activity设置Theme另一种方式就是使用PopupWindow设置样式实现效果。一,使用Activity首先是此activity的布局文件:xmlns:android="http://schemas.android.com/apk/res/android"android:layout...

weixin_28951059的博客 1120

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Android弹出框PopupWindow,Dialog,AlertDialog.Builder,AlertDialog的一知半解

项目自定义布局弹出框需要自适配屏幕的大小,坑了我自己一阵子,发现自己对弹出框的理解跟使用概念混淆,所以花了一点时间查询并总结了一下 首先是AlertDialog.Builder与AlertDialog的区别,可以参照网址:http://www.360doc.com/content/13/1225/10/5600807_339933436.shtml 大概的意思就是说,因为AlertDialog

weixin_30267253的博客 1456

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

android—PopupWindow用法

windowPopup用于自定义弹出框,例如从底部弹出。 效果图 1.初始好windowpopup布局 private void initPopup(){  LinearLayout view=(LinearLayout)LayoutInflater.from(this).inflate(R.layout.popup, null);  popup=new PopupWindow(vi

android 开发专栏 1771

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

android 底部动画,Android Animation实战之屏幕底部弹出PopupWindow

Android动画的一个实战内容,从屏幕底部滑动弹出PopupWindow。 相信这种效果大家在很多APP上都遇到过,比如需要拍照或者从SD卡选择图片,再比如需要分享某些东西时,大多会采用这么一种效果:那这种效果如何实现呢?我们仿写一个这种效果的实例吧:1)我们首先定义一下,弹出窗口的页面布局组件:take_photo_pop.xmlandroid:layout_width="fill_paren...

weixin_29447473的博客 700

Android 安卓PopupWindow工具类

答应大伙的备战金三银四,大厂面试真题来啦!这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。《960全网最全Android开发笔记》《379页Android开发面试宝典》包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。

2401_84123077的博客 841

Android studio之PopupWindow(弹出框)

实现步骤: 第一步:自定义.xml布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layou...

qq_41218412的博客 4150

PopupWindow弹出框

在android中弹出框有两种方式:AlertDialog和PopupWindow,它们的不同点在于:      1、AlertDialog的位置固定,而PopupWindow的位置可以随意;      2、AlertDialog是非阻塞线程的,而PopupWindow是阻塞线程的;            先来看看PopupWindow的效果:                  

qq_34859039的博客 190

Android 仿微信点赞和评论弹出框

本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹出框、发评论,及弹出位置的控制。

关注移动端、Web、微信小程序等大前端领域 5万+

安卓 PopupWindow

安卓 PopupWindow

qq_52410477的博客 801

Android PopupWindow的使用小案例

popupWindow PopupWindow是一个以弹窗形式展示View,灵活易用的类。在日常app开发中经常使用。下面用它来做两种常见UI布局。 效果图: 实现代码 布局代码:activity_main.xml <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/re

weixin_44902943的博客 552
上一篇: Android开发:FragmentTabHost实现底部菜单栏
下一篇: Android开发:百度地图实现路径规划
android157
博客等级 码龄9年 193粉丝 95原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值