Android 悬浮窗口之 PopupWindow
时间:2020-04-11
本文章向大家介绍Android 悬浮窗口之 PopupWindow,主要包括Android 悬浮窗口之 PopupWindow使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Overview
今天开发一个功能,是点击头像,用户可以进行对其选择要进行啥操作,但是我们需要使用悬浮窗来完成。一开始我使用的是AlertDialog来进行开发,但是出来的效果比较的丑陋,所以我就改用PopupWindow来进行操作,这个我以前就会操作,但是,一直都没有做笔记。
啥事PopupWindow
This class represents a popup window that can be used to display an arbitrary view. The popup window is a floating container that appears on top of the current activity.
我们该如何优雅的使用我们的PopupWindow呢?
按照国际惯例,我们先是看一下我们你的代码:
item_layout.xmlPopupWindow的布局页面
<?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:orientation="vertical">
<Button
android:id="@+id/btn_xixi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="Hello"
android:textSize="18sp" />
<Button
android:id="@+id/btn_hehe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="World"
android:textSize="18sp" />
</LinearLayout>
这个也是非常的简单,我们就是非常单纯的放了两个Button。
这里我是用最简单的方式,不使用任何动画操作
然后我们看一下我们的逻辑代码。
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.textView = this.findViewById(R.id.main_TextView);
this.textView.setOnClickListener(view -> initPopupWindow(view));
}
void initPopupWindow(View v) {
//创建内容显示View
View view = LayoutInflater.from(this).inflate(R.layout.item_popip, null, false);
Button btn1 = view.findViewById(R.id.btn_xixi);
Button btn2 = view.findViewById(R.id.btn_hehe);
//构造一个PopupWindow,参数依次是加载的View,宽,高
final PopupWindow popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
//添加点击PopupWindow外部PopupWindow自动消失
popupWindow.setTouchable(true);
popupWindow.setTouchInterceptor(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false;
}
});
//设置PopupWindow的显示位置,这里的参数分别是,参照View,X轴的偏移量,Y轴的偏移量
popupWindow.showAsDropDown(v, 50, 0);
//设置PopupWindow的View的点击效果
btn1.setOnClickListener(view12 -> Toast.makeText(MainActivity.this, "这是一个", Toast.LENGTH_SHORT).show());
btn2.setOnClickListener(view1 -> Toast.makeText(MainActivity.this, "PopupWindow", Toast.LENGTH_SHORT).show());
}
}
这部分就是我们的全部代码了。
接着我们看一我们的实现它逻辑是啥:
首先,我们点击了一个TextView来进行PopupWindow悬浮窗的显示。
然后我们通过initPopupWindow来进行。
方法中的v是我们的显示参照物,方法中的View是显示的内容。
下面的操作在,代码中都有比较详细的注释,可以自己看一下。
原文地址:https://www.cnblogs.com/cao-1/p/12680483.html
- React Native如何消除启动时白屏
- Observer观察者设计模式
- 创建 GitHub 仓库的步骤及方法
- React Native和原生app通信机制详解
- Python高效编程技巧
- 模块和处理程序之通过HttpModule和HttpHandler拦截入站HTTP请求执行指定托管代码模块
- iOS如何实现多个环境一次打包
- iOS 轻量级存储
- 深入理解React Native页面构建渲染原理
- React native城市列表组件
- iframe 解析
- React Native之StyleSheet样式表
- jQuery对象扩展方法(Extend)深度解析
- 线程同步:System.Core中新的读写锁
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux中date命令转换日期提示date: illegal time format问题解决
- leetcode队列之最近的请求次数
- 安防视频云服务EasyCVR集成海康SDK时语音对出现杂音问题,如何解决?
- arm linux利用alsa驱动并使用usb音频设备
- linux 磁盘转移空间的方法
- 详解git中配置的.gitignore不生效的解决办法
- Apache Thrift环境配置
- CentOS 7更新时出现:Multilib version problems问题的解决方法
- Linux模拟网络丢包与延迟的方法
- centos6.5通过yum安装nginx
- Linux系统利用cp命令实现强制覆盖功能的方法
- leetcode队列之设计循环双端队列
- Centos7学习之添加用户和用户组的方法
- Linux静态库与动态库实例详解
- Linux字符终端如何用鼠标移动一个红色矩形详解