Android:popupwindow实现底部弹窗实例
16lz
2021-01-24
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
更多相关文章
- 把这份关于Android(安卓)Binder原理一系列笔记研究完,进大厂是个
- Flutter事件分发源码剖析
- Android应用程序进程启动源码解析
- Android(安卓)UI组件框架AndroidMaterialDesign详解
- [Android开发实战]Android手势密码(支付宝手势密码)实现(支持2.x)
- Android仿微信下拉列表实现(附源码)
- Android中AnimationDrawable使用的简单实例
- 给大家介绍几个常见的Android代码片段
- Android——4.2 - 3G移植之路之 reference-ril .pppd 拨号上网 (