Android studio 之 弹窗PopupWindow

这篇具有很好参考价值的文章主要介绍了Android studio 之 弹窗PopupWindow。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.准备弹窗视图 popuop_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:background="#00ffff"
    android:padding="2dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">


    <TextView
        android:id="@+id/sele"
        android:layout_width="60dp"
        android:layout_height="30dp"
        android:background="#000000"
        android:textColor="#ffffff"
        android:gravity="center"
        android:text="选择" />

    <TextView
        android:id="@+id/all_sele"
        android:layout_width="60dp"
        android:layout_height="30dp"
        android:background="#000000"
        android:textColor="#ffffff"
        android:gravity="center"
        android:text="全选" />

    <TextView
        android:id="@+id/cope"
        android:layout_width="60dp"
        android:layout_height="30dp"
        android:background="#000000"
        android:textColor="#ffffff"
        android:gravity="center"
        android:text="复制" />
</LinearLayout>

2.添加一个按钮

 <Button
   android:id="@+id/popw_btn"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_marginTop="20dp"
   android:onClick="popAlert"
   android:text="PopupWindow 弹窗" />

3.在按钮的点击事件中设置弹窗

实例化 PopupWindow 对象

参数一 ,用在弹窗中的View(注意不是布局资源id,所以要根据布局资源id转换成view)

布局文件xml和视图之间的关系
  • 布局文件(.xml文件)定义了UI元素的结构和外观,而View对象则代表了布局中的一个具体的UI元素。 通过使用LayoutInflater类,我们可以将布局文件解析成一个View对象,然后将布局文件转换为实际可见的 UI 元素
  • 通过指定上下文(this)来获取当前上下文环境的LayoutInflater实例.
  • inflate(R.layout.popuop_layout, null)是LayoutInflater类的方法,它用于将布局文件R.layout.popuop_layout转换为一个View对象

参数二/三 长宽
参数四 是否获取焦点

//设置PopupWindow
    public void showPopupWindow(View anchorView){

        // 1.实例化 PopupWindow 对象
        /* 参数一 用在弹窗中的View(注意不是布局资源id,所以要根据布局资源id转换成view)
         * 参数二/三 长宽
         * 参数四 是否获取焦点*/
        // 1.1 准备弹窗需要的视图
        /* 根据 id = R.layout.popuop_layout 布局文件创建一个视图View,在 环境上下文 中使用*/
        /* 布局文件xml和视图之间的关系
         * 布局文件(.xml文件)定义了UI元素的结构和外观,而View对象则代表了布局中的一个具体的UI元素。
         * 通过使用LayoutInflater类,我们可以将布局文件解析成一个View对象,然后将布局文件转换为实际可见的 UI 元素
         * 通过指定上下文(this)来获取当前上下文环境的LayoutInflater实例
         * nflate(R.layout.popuop_layout, null)是LayoutInflater类的方法,它用于将布局文件R.layout.popuop_layout转换为一个View对象。*/
        View v = LayoutInflater.from(this).inflate(R.layout.popuop_layout,null);
        PopupWindow popupWindow = new PopupWindow(v,400,70,false);

        // 2.设置
        // 2.1 设置背景
        popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));// 透明色
        // 2.2 设置能响应外部的点击事件
        popupWindow.setOutsideTouchable(true);
        // 2.3 设置弹窗能响应点击事件
        popupWindow.setTouchable(true);
        // 2.4 为弹窗中的文本设计点击事件
        /* 一般设计点击事件需要用 findViewById() 去找到控件的id,从而找到控件,再为控件绑定点击事件
         * 但此时我们想要找的控件不在当前视图中,它在 R.layout.popuop_layout 布局中,所以我们要在由它创建的视图中找控件
         * 当前activity绑定的布局是 R.layout.activity_button */
        v.findViewById(R.id.sele).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(ButtonActivity.this,"点击了选择",Toast.LENGTH_SHORT).show();
                popupWindow.dismiss();
            }
        });

        v.findViewById(R.id.all_sele).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(ButtonActivity.this,"点击了全选",Toast.LENGTH_SHORT).show();
                popupWindow.dismiss();
            }
        });

        v.findViewById(R.id.cope).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(ButtonActivity.this,"点击了复制",Toast.LENGTH_SHORT).show();
                popupWindow.dismiss();
            }
        });

        // 3.显示
        /* View anchor, int xoff, int yoff
         * 参数一 在哪里显示
         * x偏移
         * y偏移*/
        popupWindow.showAsDropDown(anchorView);

设置弹窗动画

创建动画资源

在res目录下新建 anim文件,新建动画资源

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

<!--  设置动画资源,此时是移动动画  -->
    <translate

        android:fromXDelta="-10dp"
        android:toXDelta="0dp"
        android:fromYDelta="-10dp"
        android:toYDelta="0dp"/>
</set>

创建风格,应用动画资源 - 打开values 下的 themesxml 文件,添加一下代码

<!--2.在风格里应用动画 -->
    <!-- popupStyle 的风格
         android:windowExitAnimation 窗口进入动画
     -->
    <style name="popupStyle">
        <item name="android:windowExitAnimation"> @anim/popup</item>
    </style>

为弹窗设置风格文章来源地址https://www.toymoban.com/news/detail-814706.html

 // 设置弹窗动画
        /* 1.创建动画资源 -- 先创建文件夹 再创建资源文件
         * 2.创建风格,应用动画资源
         * 3.将当前弹窗的的动画风格设置为第2步的风格 */
        popupWindow.setAnimationStyle(R.style.popupStyle);
//设置PopupWindow
    public void showPopupWindow(View anchorView){

        // 1.实例化 PopupWindow 对象
        /* 参数一 用在弹窗中的View(注意不是布局资源id,所以要根据布局资源id转换成view)
         * 参数二/三 长宽
         * 参数四 是否获取焦点*/
        // 1.1 准备弹窗需要的视图
        /* 根据 id = R.layout.popuop_layout 布局文件创建一个视图View,在 环境上下文 中使用*/
        /* 布局文件xml和视图之间的关系
         * 布局文件(.xml文件)定义了UI元素的结构和外观,而View对象则代表了布局中的一个具体的UI元素。
         * 通过使用LayoutInflater类,我们可以将布局文件解析成一个View对象,然后将布局文件转换为实际可见的 UI 元素
         * 通过指定上下文(this)来获取当前上下文环境的LayoutInflater实例
         * nflate(R.layout.popuop_layout, null)是LayoutInflater类的方法,它用于将布局文件R.layout.popuop_layout转换为一个View对象。*/
        View v = LayoutInflater.from(this).inflate(R.layout.popuop_layout,null);
        PopupWindow popupWindow = new PopupWindow(v,400,70,false);

        // 2.设置
        // 2.1 设置背景
        popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));// 透明色
        // 2.2 设置能响应外部的点击事件
        popupWindow.setOutsideTouchable(true);
        // 2.3 设置弹窗能响应点击事件
        popupWindow.setTouchable(true);
        // 2.4 为弹窗中的文本设计点击事件
        /* 一般设计点击事件需要用 findViewById() 去找到控件的id,从而找到控件,再为控件绑定点击事件
         * 但此时我们想要找的控件不在当前视图中,它在 R.layout.popuop_layout 布局中,所以我们要在由它创建的视图中找控件
         * 当前activity绑定的布局是 R.layout.activity_button */
        v.findViewById(R.id.sele).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(ButtonActivity.this,"点击了选择",Toast.LENGTH_SHORT).show();
                popupWindow.dismiss();
            }
        });

        v.findViewById(R.id.all_sele).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(ButtonActivity.this,"点击了全选",Toast.LENGTH_SHORT).show();
                popupWindow.dismiss();
            }
        });

        v.findViewById(R.id.cope).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(ButtonActivity.this,"点击了复制",Toast.LENGTH_SHORT).show();
                popupWindow.dismiss();
            }
        });

        // 设置弹窗动画
        /* 1.创建动画资源 -- 先创建文件夹 再创建资源文件
         * 2.创建风格,应用动画资源
         * 3.将当前弹窗的的动画风格设置为第2步的风格 */
        popupWindow.setAnimationStyle(R.style.popupStyle);


        // 3.显示
        /* View anchor, int xoff, int yoff
         * 参数一 在哪里显示
         * x偏移
         * y偏移*/
        popupWindow.showAsDropDown(anchorView);
    }

到了这里,关于Android studio 之 弹窗PopupWindow的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 实现Loading弹窗

    总结下一个简单的需求,后续需要用到的时候可以直接用。 在我们网络请求,异步加载数据,等待函数回调,数据库的操作等耗时的过程中,这个时候,界面在等待返回数据来进行展示,此时加上一个loading弹窗会显得有好很多。 在一些情况下不加的话,会导致一些后果:

    2024年02月14日
    浏览(31)
  • Android---底部弹窗之BottomSheetDialog

    BottomSheetDialog 是Android开发中的一个弹出式对话框,它从屏幕底部弹出并覆盖部分主界面。 1. BottomSheetDialog的使用 2.加载布局 bottom_sheet_layout.xml ; 通过LayoutInflater拿到底部弹窗布局后,通过setContentView()把布局加载到BottomSheetDialog中。 3.显示 通过调用  BottomSheetDialg.show()方法就能

    2024年02月04日
    浏览(41)
  • Android 自定义View 之 Dialog弹窗

      在日常开发中用到弹窗是比较多的,常用于提示作用,比如错误操作提示,余额不足提示,退出登录提示等,还有用于数据展示的弹窗,上拉弹窗等等,主要为了简化在日常开发中的使用。   Android中的Dialog弹窗是一种用于展示特定信息或者在用户需要进行某些操作时

    2024年02月16日
    浏览(29)
  • Android的 AlertDialog自定义布局与常用布局用法(弹窗)

    1.直接上效果图,看看是不是你们想要的效果图 2.主活动MainActivity2的代码如下

    2024年02月12日
    浏览(30)
  • Android 13.0 SystemUI增加低电量弹窗功能

    在13.0系统定制开发rom的产品时,对于低电量提醒也是个很好的体验,由于产品要求在低电量的时候增加个弹窗提醒用户电量低及时充电,所以就开发了这个功能 在SystemUI的启动流程,在SystemServer的startOtherServices方法中,会启动SystemUIService服务,SystemUIService服务的onCreate方法会

    2024年02月05日
    浏览(34)
  • Android 13 Launcher——长按图标弹窗背景变暗

    目录 一.背景 二.修改代码 客户定制需要长按图标弹窗让其背景变暗,所以需要进行定制,如下是定制流程,本篇是接上篇https://gonglipeng.blog.csdn.net/article/details/132171100 的内容 主要代码逻辑在ArrowPopup中的reorderAndShow方法和closeComplete方法中,其中reorderAndShow方法是为了让其显示

    2024年02月13日
    浏览(33)
  • Android开发之Notification(实现消息弹窗、提示音以及点击事件)

    通知管理器(NotificationManager)类是一个通知管理器,这个对象是由系统维护的服务,是以单例模式的方式获得,所以一般并不直接实例化这个对象。在 Activity中,可以使用 Activity.getSystemService(String) 方法获取通知管理器对象, Activity.getSystemService(String) 方法可以通过 Android系统

    2024年02月01日
    浏览(33)
  • Android 12.0Launcher3 去掉workspace长按弹出壁纸弹窗

    在12.0的系统开发中,在Launcher3开发中,在长按屏幕的时候,会弹出窗口,修改主屏幕配置,壁纸,等信息,由于要默认设置一些配置 不想让用户修改相关配置,这时候就需要去掉长按弹窗功能了,禁止修改相关配置 下面来分析下workspace相关长按事件的功能实现 先看workspac

    2024年02月07日
    浏览(54)
  • Android12(S)授权弹窗被悬浮窗遮挡导致无法点击问题分析

    在测试过程中发现,部分情况下当应用请求权限时,权限授予弹窗中的选项无法点击,有时候又可以。点击其他区域发现是可以正常响应,获取按键事件,发现触摸是有正常上报事件的,所以可以排除是触摸失灵导致。 既然是权限授予弹窗无法点击,那么我们就去找权限管理

    2024年02月11日
    浏览(28)
  • 8年经验之谈 —— Android自动化测试中如何处理各种弹窗?

    在UI自动化测试中弹窗是影响自动化用例稳定性的一大因素,如何方便快捷的处理各种情况下的弹窗,是搞UI自动化测试必须要面临的问题. 安装APP时的系统弹窗 此类弹窗一般有两种,一种是自动化测试框初始化本身也需要安装一些APP,比如uiautomator2会安装atx-agent、com.github.

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包