如何在Android中实现悬浮窗按钮
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这篇文章主要介绍了如何在Android中实现悬浮窗按钮的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何在Android中实现悬浮窗按钮文章都会有所收获,下面我们一起来看
千家信息网最后更新 2025年11月11日如何在Android中实现悬浮窗按钮
这篇文章主要介绍了如何在Android中实现悬浮窗按钮的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何在Android中实现悬浮窗按钮文章都会有所收获,下面我们一起来看看吧。
首先是页面布局:
下面一步步的介绍这个悬浮窗的创建。
1 悬浮窗的显示
// 创建WindowManager对象private WindowManager windowManager;windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);// 创建悬浮窗的LayoutParams private void initLayoutParams() { try { DisplayMetrics metrics = new DisplayMetrics(); windowManager.getDefaultDisplay().getMetrics(metrics); screenWidth = metrics.widthPixels; screenHeight = metrics.heightPixels; lp = new WindowManager.LayoutParams(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; } else { lp.type = WindowManager.LayoutParams.TYPE_TOAST; } lp.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; lp.gravity = Gravity.START | Gravity.TOP; lp.x = screenWidth - view.getLayoutParams().width * 2; lp.y = 0; lp.width = WindowManager.LayoutParams.WRAP_CONTENT; lp.height = WindowManager.LayoutParams.WRAP_CONTENT; lp.format = PixelFormat.TRANSPARENT; } catch (Exception e) { } }上面分别创建了控制悬浮窗显示的WindowManager和控制悬浮窗布局的LayoutParams
然后使用如下代码就可展示悬浮窗了:
public void show() { if (!isShowing) { isShowing = true; windowManager.addView(this, lp); } }想要移除悬浮窗也很简单,如下代码:
public void dismiss() { if (isShowing) { isShowing = false; windowManager.removeView(this); } }2 触摸事件
触摸事件可以使得悬浮窗跟随手指进行移动
// 界面FloatLayoutBinding layoutBinding = DataBindingUtil.inflate(LayoutInflater.from(context),R.layout.float_layout,this,false);FloatNormalViewModel floatNormalViewModel = new FloatNormalViewModel(context,layoutBinding,onClickCallback);layoutBinding.setViewModel(floatNormalViewModel);addView(layoutBinding.getRoot());view = layoutBinding.root;isShowControlView = layoutBinding.floatId;//这就是控制按钮// 控制的变量private float downX, downY;private float moveX, moveY;// 触摸事件isShowControlView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getActionMasked()) { case MotionEvent.ACTION_DOWN: downX = motionEvent.getRawX(); downY = motionEvent.getRawY(); break; case MotionEvent.ACTION_MOVE: moveX = motionEvent.getRawX() - downX; moveY = motionEvent.getRawY() - downY; downX += moveX; downY += moveY; updateViewPosition(); break; } return false; }});private void updateViewPosition() { lp.x += (int) (moveX); lp.y += (int) (moveY); windowManager.updateViewLayout(this, lp);}3 点击事件
点击事件是实现了一个回调函数,因为点击事件的逻辑不应该在此处完成,应当交给主布局进行控制,所以定义了一个点击接口。
这里事件的处理顺序是:点击了按钮后,按钮将点击事件通过回调函数来处理,而回调函数是由创建这个View的Activity或者Fragment、Service等提供的,就将事件处理交到了外部。
// 点击的接口public interface OnClickCallback { public void onClick(View view);}// 控制按钮点击事件public void onControlClick(View view){ if(onClickCallback != null) onClickCallback.onClick(view);}多功能悬浮窗
多功能悬浮窗与上面类似,只不过在点击事件上较多而已。
而如何完成两个悬浮窗的切换呢,就可以利用之前所使用的OnClickCallback回调接口了,将一个显示、另一个隐藏即可,且两个悬浮窗若采用同一个LayoutParams就可以让两个显示在同一个位置。
private void init() { floatNormalView = new FloatNormalView(context, new OnClickCallback() { @Override public void onClick(View view) { floatControlView.setLayoutParams(floatNormalView.getLayoutParams()); floatControlView.show(); floatNormalView.dismiss(); } }); floatControlView = new FloatControlView(context, new OnClickCallback() { @Override public void onClick(View view) { floatNormalView.setLayoutParams(floatControlView.getLayoutParams()); floatNormalView.show(); floatControlView.dismiss(); } }, new FloatControlViewModel.OnVisibleChangeListener() { @Override public void onChange(boolean isVisible) { if (isControlVisible) { floatControlView.show(); floatNormalView.dismiss(); } else { floatControlView.dismiss(); floatNormalView.show(); } } }); floatNormalView.show(); }关于"如何在Android中实现悬浮窗按钮"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"如何在Android中实现悬浮窗按钮"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
事件
按钮
控制
中实
两个
函数
布局
接口
知识
处理
代码
内容
多功能
篇文章
价值
位置
变量
只不过
对象
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
浪潮机架式服务器功耗
网络安全宣传军营讲课
城管局网络安全总结
网络安全漫画手绘简单
我国网络安全立法体系
软件开发用macbook合适吗
首都网络安全日的口号
软件开发哪家大
一些好玩的跑酷服务器
软件开发软件教育机构
3d打印的数据库
有关互联网信息科技的股票
数据库中的decel模块
途牛软件开发平台部
数据库如何对不同身份划分权限
高速服务区信息数据库
网络安全知识竞赛所需软件
公安部网络安全评测机构
进入网络安全模式要多久
网络安全维护做什么
重庆机电维修与设备管理软件开发
extjs连接数据库
网络安全员需要的条件
学习数据库与应用的心得
企业信息化软件开发
网络安全方向大学排名
成都市中国网络安全大会
做好全方位网络安全防护
浙江办公系统软件开发正规平台
监控系统在服务器中的作用