Android - popWindow简单使用_android popwindow-程序员宅基地

技术标签: java  android  android studio  Android Studio  

效果

点击控件,弹出窗口;再次点击控件,窗口消失;
点击按钮一,吐丝,窗口消失;
点击按钮二、三,吐丝,窗口不消失;
点击外部,窗口消失;

在这里插入图片描述效果

在这里插入图片描述

设置多一个布局 - - 窗口的布局
相关代码解释,在注释里有写

activity_main.xml

 <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textSize="25dp"
       android:text="popWindow"
       android:padding="10dp"
       android:id="@+id/tv_popWindow"/>

activity_popwindow.xml

   <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="按钮一"
        android:id="@+id/bt_one"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="按钮二"
        android:id="@+id/bt_two"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="按钮三"
        android:id="@+id/bt_three"/>

在这里插入图片描述

MainActivity.java

//控件,点击弹出窗口
 tv = findViewById(R.id.tv_popWindow);
        tv.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
    
            	//窗口
                popWindow();
            }
        });
private PopupWindow mPopWindow;
    private void popWindow() {
    
        //利用 LayoutInflater获取 R.layout.activity_popwindow 对应的 View
        View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_popwindow, null);
        mPopWindow = new PopupWindow(contentView);

        /*
        * 设置窗体的长和宽
        * 代码强制设置 PopupWindow的 Height、Width(否则无法显示出来)
        * popupWindow的宽和高, 以这里代码设置的为准
        * */
        mPopWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
        mPopWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        //充满
//        mPopWindow.setWidth(ViewGroup.LayoutParams.FILL_PARENT);
//        mPopWindow.setHeight(ViewGroup.LayoutParams.FILL_PARENT);


        //设置动画所对应的style
//        mPopWindow.setAnimationStyle(R.style.contextMenuAnim);


        /*
        * 外部点击, 隐藏窗体的功能(三种方法)
        * */
        //1. 设置再次点击控件的时候,关闭窗口,不重新打开
        mPopWindow.setFocusable(true);
        //2.
//        mPopWindow.setOutsideTouchable(true);
        //3.
//        ColorDrawable dw = new ColorDrawable(0x00000000);
//        mPopWindow.setBackgroundDrawable(dw);


        /*
        * 设置窗体在控件的相对位置
        * */
        // 显示在某个控件的正左下方,无偏移
        mPopWindow.showAsDropDown(tv);
        // 相对某个控件的位置,有偏移,xoff为 X轴的偏移量,yoff为 Y轴的偏移量
//        mPopWindow.showAsDropDown(tv, 0, 0);
        //相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
//        mPopWindow.showAtLocation(tv, Gravity.BOTTOM, 10, 30);


        Button bt_one = contentView.findViewById(R.id.bt_one);
        bt_one.setOnClickListener(this);
        Button bt_two = contentView.findViewById(R.id.bt_two);
        bt_two.setOnClickListener(this);
        Button bt_three = contentView.findViewById(R.id.bt_three);
        bt_three.setOnClickListener(this);
    }
//点击按钮,吐丝
@Override
    public void onClick(View v) {
    
        switch (v.getId()){
    
            case R.id.bt_one:
                Toast.makeText(this, "你点击了按钮一", Toast.LENGTH_SHORT).show();
                //窗体消失
                mPopWindow.dismiss();
                break;

            case R.id.bt_two:
                Toast.makeText(this, "你点击了按钮二", Toast.LENGTH_SHORT).show();
                break;

            case R.id.bt_three:
                Toast.makeText(this, "你点击了按钮三", Toast.LENGTH_SHORT).show();
                break;
        }
    }

在这里插入图片描述

完整代码(MainActivity.java)

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    
    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = findViewById(R.id.tv_popWindow);
        tv.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
    
                popWindow();
            }
        });
    }

    private PopupWindow mPopWindow;
    private void popWindow() {
    
        //利用 LayoutInflater获取 R.layout.activity_popwindow 对应的 View
        View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_popwindow, null);
        mPopWindow = new PopupWindow(contentView);

        /*
        * 设置窗体的长和宽
        * 代码强制设置 PopupWindow的 Height、Width(否则无法显示出来)
        * popupWindow的宽和高, 以这里代码设置的为准
        * */
        mPopWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
        mPopWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        //充满
//        mPopWindow.setWidth(ViewGroup.LayoutParams.FILL_PARENT);
//        mPopWindow.setHeight(ViewGroup.LayoutParams.FILL_PARENT);


        //设置动画所对应的style
//        mPopWindow.setAnimationStyle(R.style.contextMenuAnim);


        /*
        * 外部点击, 隐藏窗体的功能(三种方法)
        * */
        //1. 设置再次点击控件的时候,关闭窗口,不重新打开
        mPopWindow.setFocusable(true);
        //2.
//        mPopWindow.setOutsideTouchable(true);
        //3.
//        ColorDrawable dw = new ColorDrawable(0x00000000);
//        mPopWindow.setBackgroundDrawable(dw);


        /*
        * 设置窗体在控件的相对位置
        * */
        // 显示在某个控件的正左下方,无偏移
        mPopWindow.showAsDropDown(tv);
        // 相对某个控件的位置,有偏移,xoff为 X轴的偏移量,yoff为 Y轴的偏移量
//        mPopWindow.showAsDropDown(tv, 0, 0);
        //相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
//        mPopWindow.showAtLocation(tv, Gravity.BOTTOM, 10, 30);


        Button bt_one = contentView.findViewById(R.id.bt_one);
        bt_one.setOnClickListener(this);
        Button bt_two = contentView.findViewById(R.id.bt_two);
        bt_two.setOnClickListener(this);
        Button bt_three = contentView.findViewById(R.id.bt_three);
        bt_three.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
    
        switch (v.getId()){
    
            case R.id.bt_one:
                Toast.makeText(this, "你点击了按钮一", Toast.LENGTH_SHORT).show();
                //窗体消失
                mPopWindow.dismiss();
                break;

            case R.id.bt_two:
                Toast.makeText(this, "你点击了按钮二", Toast.LENGTH_SHORT).show();
                break;

            case R.id.bt_three:
                Toast.makeText(this, "你点击了按钮三", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

在这里插入图片描述

添加动画

Android - 简单动画

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43707799/article/details/107491446

智能推荐

Java的BIO和NIO很难懂?用代码实践给你看,再不懂我转行!-程序员宅基地

文章浏览阅读280次。本文原题“从实践角度重新理解BIO和NIO”,原文由Object分享,为了更好的内容表现力,收录时有改动。1、引言这段时间自己在看一些Java中BIO和NIO之类的东西,也看了很多博客,发现各种关于NIO的理论概念说的天花乱坠头头是道,可以说是非常的完整,但是整个看下来之后,发现自己对NIO还是一知半解、一脸蒙逼的状态(请原谅我太笨)。基于以上原因,..._java bio粘包处理

Python3.9环境搭建RobotFramework_python-3.9.9-amd64用那个版本ride-程序员宅基地

文章浏览阅读9k次,点赞2次,收藏12次。Robot Framework是一个基于Python的,可扩展的关键字驱动的测试自动化框架,用于端到端验收测试和验收测试驱动开发(ATDD)。_python-3.9.9-amd64用那个版本ride

五一建模-程序员宅基地

文章浏览阅读4.8k次。声势浩大的五一校赛数学建模终于结束了(假装很重大的样子,实际上几乎没人参加,心疼自己一秒钟,不过的确是光东兄一直以来引以为豪的一件事,另一个就是他儿子)每天从早上9点干到晚上11点真心不容易啊,玄老师都感慨,建模一次,腰痛好多天。从开始的欣格找我,到和汶林成功组队,很快,就突然愉快地决定了。五一假期第一天,海洋楼地下大机房没有开门,自然也就没法用上边的matlab了,还好有长..._五一建模

JavaScript核心-2. DOM_div属于dom模型-程序员宅基地

文章浏览阅读161次。一、DOM1.1 什么是DOM文档对象模型(Document Object Model,简称 DOM),是 W3C 组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口W3C 已经定义了一系列的 DOM 接口,通过这些 DOM 接口可以改变网页的内容、结构和样式。1.2 DOM 树文档:一个页面就是一个文档,DOM 中使用 document 表示元素:页面中的所有标签都是元素,DOM 中使用 element 表示节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM_div属于dom模型

Sublime Text 3.0设置默认启动浏览器_sublime js open in default browser-程序员宅基地

文章浏览阅读1.4w次。1.首先需要安装SideBarEnhancements插件2.打开设置文件,输入内容如下:{ "default_browser": "chrome" //one of this list: firefox, aurora, chrome, canary, chromium, opera, safari}此处默认浏览器设置为chrome.3.打开快捷键配置文件,输入_sublime js open in default browser

反手来个K8S入门到跑路-程序员宅基地

文章浏览阅读181次。layout: posttitle: 反手来个K8S入门到跑路category: linuxdate: 2019-06-09tags:linuxk8s反手来个K8S入门到跑路前言放假前一两天发现腾讯云托管K8S集群上线好一阵子了, 还支持把原有主机迁入k8s集群, 索性开始搞事了.先简单科普一下, 什么是k8s?k8s 科普时间Kubernetes (K8..._kong externaltrafficpolicy

随便推点

(七)用ChartDirector绘制实时图表-程序员宅基地

文章浏览阅读467次。本示例演示如何用Web图表控件 ChartDirector 绘制一个配置有刷新率的实时图表。在本例中,由一个计时器驱动的随机数生成器生成新的数据值,新产生的值会转换到数据数组中,然后显示在图表上。图表由一个秒表进行更新,这样图表的刷新率可独立于数据率。此外,这个图表支持暂停以方便用户查看,但是后台的数据仍然在继续更新。图表刷新计时器调用CChartViewer.update..._c++ chartdirect updateviewport

MySQL错误解决——[Err] 1030 - Got error 168 from storage engine_mysql1030错误 168-程序员宅基地

文章浏览阅读8.2k次。用docker装的MySQL映射到本地路径,然后突然遇到这个报错,表面上看起来是存储引擎出问题了,但建表引擎都没有改过。回想一下是映射的路径文件被我移到别的地方了,应该是影响到了,所以我选择删除原来的docker镜像重新run到新的路径,问题解决。..._mysql1030错误 168

ST算法_st语言 线性拟合计算-程序员宅基地

文章浏览阅读191次。ST算法ST算法其实就是倍增的实现好东西时间复杂度O(NlogN)我们的得先看问题:给定一个长度N的序列A,在线回答,lr之间的数的最大值是多少。这是一个区间求最值的问题。其实ST就是用来求最值的,树上或者是线性上。其实这个题跟二分有点像,二分聪明,倍增比他还聪明。设f[i,j]为区间[i,i+2^j-1]的最大值,那么边界显然是Ai,我们把子区间的长度成倍增长。公式 :f[i,j]=max(f[i,j-1],f[i+2^j,j-1]),这就是两个区间的最大值,很像二分max(f[l][k]_st语言 线性拟合计算

运行软件出现:模块“msvcp110.dll”已加载,但找不到入口点DllRegister-程序员宅基地

文章浏览阅读5.6k次。根据百度大多数回答来说1:先是出现 无法启动程序,因为计算机丢失mfc110.dll 尝试重新安装该程序以解决问题 错误处理:下载或者在别人电脑上拷一份 如:'msvcp110.dll‘ 这类文件然后复制粘贴到系统盘即使/C/windows/system32或者64位系统就放到syswow64 楼主亲测是不能成功的。至少大多数情况是这样的,原因:不同的程序所需..._msvcr110dll已加载但找不到入口点

重新审视 Bancor 算法,为什么 cw 是失效的设计-程序员宅基地

文章浏览阅读344次。导读:为 Ethereum 设计的 Bancor 算法,解决了小币种的连续流动性问题,最近在 TPS 更高的 EOS 生态中焕发了新的活力。但其设计存在几个无法避免的现实..._bancor算法cw

组件路由vuex axios 使用相关 基础_vue router getters rootstate-程序员宅基地

文章浏览阅读259次。1.书写指定路由import Vue from 'vue'import VueRouter from 'vue-router'Vue.use(VueRouter)const routes = [ { path: '/', component: () => import('../views/Login/index.vue') },]const router = new VueRouter({ routes})export default router_vue router getters rootstate