Android:popupwindow实现底部弹窗源码实例

 

 

一、PopupWindow这个类用来实现一个弹出框,可以使用任意布局的View作为其内容,这个弹出框是悬浮在当前activity之上的。

二、实例测试。

       1、在res目录下新建anim目录,在anim目录下建两个动画效果文件popshow_anim.xml和pophidden_anim.xml,用来控制菜单的弹出和隐藏。里面的是配置菜单弹出时的效果, translate 位置转移动画效果 duration 属性为动画持续时间 ,fromXDelta 属性为动画起始时 X坐标上的位置 toYDelta 属性为动画结束时 Y坐标上的位置 ,属性里面还可以加上%和p,例如:
            android:toXDelta=”100%”,表示自身的100%,也就是从View自己的位置开始。
            android:toXDelta=”80%p”,表示父层View的80%,是以它父层View为参照的。

popshow_anim.xml:

<?xml version="1.0" encoding="utf-8"?>        

  pophidden_anim.xml

<?xml version="1.0" encoding="utf-8"?>        

       2、style.xml里添加ipopwindow_anim_style

            

       3、layout目录下新建弹出框的布局文件popupwindow.xml

<?xml version="1.0" encoding="utf-8"?>                                             

       4、layout目录下新建布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>    

 

       5、MainActivity.java,源码里面有相应注释。

package com.example.popupwindow_demo;import androidx.appcompat.app.AppCompatActivity;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.view.Gravity;import android.view.KeyEvent;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.PopupWindow;import android.widget.Toast;public class MainActivity extends AppCompatActivity {    private PopupWindow popupWindow;    private View contentView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        showPopwindow();    }    /**     * 显示popupWindow     */    private void showPopwindow() {        //加载弹出框的布局        contentView = LayoutInflater.from(MainActivity.this).inflate(                R.layout.popupwindow, null);        // 设置按钮的点击事件        Button button = (Button) contentView.findViewById(R.id.tv_pop_cancel);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(MainActivity.this, "button is pressed",                        Toast.LENGTH_SHORT).show();            }        });        popupWindow = new PopupWindow(contentView,                ViewGroup.LayoutParams.MATCH_PARENT,                ViewGroup.LayoutParams.WRAP_CONTENT);        popupWindow.setFocusable(true);// 取得焦点        //注意  要是点击外部空白处弹框消息  那么必须给弹框设置一个背景色  不然是不起作用的        popupWindow.setBackgroundDrawable(new BitmapDrawable());        //点击外部消失        popupWindow.setOutsideTouchable(true);        //设置可以点击        popupWindow.setTouchable(true);        //进入退出的动画,指定刚才定义的style        popupWindow.setAnimationStyle(R.style.ipopwindow_anim_style);    }    // 按下android回退物理键 PopipWindow消失解决    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if(event.getKeyCode()==KeyEvent.KEYCODE_BACK){            if(popupWindow!=null&&popupWindow.isShowing()){                popupWindow.dismiss();                return true;            }        }        return false;    }   /**     * 按钮的监听     * @param v     */    public void openPopWindow(View v) {        //从底部显示            popupWindow.showAtLocation(contentView, Gravity.BOTTOM, 0, 0);    }}

       6、源码的结构图 

       7、执行效果

 

三、本demo源码下载地址:

https://download.csdn.net/download/qq_37858386/12465111

 

更多相关文章

  1. 把这份关于Android(安卓)Binder原理一系列笔记研究完,进大厂是个
  2. Flutter事件分发源码剖析
  3. Android应用程序进程启动源码解析
  4. Android(安卓)UI组件框架AndroidMaterialDesign详解
  5. [Android开发实战]Android手势密码(支付宝手势密码)实现(支持2.x)
  6. Android仿微信下拉列表实现(附源码)
  7. Android中AnimationDrawable使用的简单实例
  8. 给大家介绍几个常见的Android代码片段
  9. Android——4.2 - 3G移植之路之 reference-ril .pppd 拨号上网 (

随机推荐

  1. Android仿微信选择图片和拍照功能
  2. Android应用开发学习笔记之多线程与Handl
  3. android中gradle 3.1.4 处理com.android.
  4. Android(安卓)Studio 3.0+添加ButterKnif
  5. ionic app 目录结构说明
  6. Android应用程序安装与Launcher启动机制
  7. Android界面之常用的圆角提示框Dialog
  8. Android实现QQ分享功能
  9. android launcher总体分析 .
  10. [Android]获取设备IP地址