知乎回答怎么加入浮窗,知乎回答加入浮窗教程

1. 加入浮窗

1.1 获取悬浮窗权限

在 Android 6.0 以上的系统中,需要获取悬浮窗权限才能创建悬浮窗。获取权限有两种方式:

代码获取:

可以在 Activity 的 onCreate() 中添加以下代码:

知乎回答怎么加入浮窗,知乎回答加入浮窗教程

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

? ?if (!Settings.canDrawOverlays(this)) {

? ? ? ?Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);

? ? ? ?intent.setData(Uri.parse("package:" + getPackageName()));

? ? ? ?startActivity(intent);

? ?}

}

手动获取:

用户可以在应用设置的权限管理中,手动打开悬浮窗权限。

1.2 添加悬浮窗代码

悬浮窗的创建需要使用 WindowManager,可通过以下代码创建:

windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);

windowManagerParams = new WindowManager.LayoutParams();

windowManagerParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; // 悬浮窗类型,允许浮在应用之上

windowManagerParams.format = PixelFormat.RGBA_8888; // 悬浮窗颜色

windowManagerParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; // 设置是否能够获取焦点

windowManagerParams.width = WindowManager.LayoutParams.WRAP_CONTENT; // 悬浮窗的宽度

windowManagerParams.height = WindowManager.LayoutParams.WRAP_CONTENT; // 悬浮窗的高度

windowManagerParams.gravity = Gravity.TOP | Gravity.LEFT; // 悬浮窗的位置

windowManagerParams.x = 0; // 悬浮窗x坐标

windowManagerParams.y = 0; // 悬浮窗y坐标

windowManager.addView(mFloatingView, mLayoutParams); // 添加悬浮窗

其中,mFloatingView 为悬浮窗视图,mLayoutParams 为悬浮窗布局参数。

2. 浮窗教程

2.1 实现浮窗拖拽

用户可以通过拖拽悬浮窗来改变它的位置。实现拖拽的方法如下:

1. 设置触摸事件:

mFloatingView.setOnTouchListener(new View.OnTouchListener() {

? ?@Override

? ?public boolean onTouch(View v, MotionEvent event) {

? ? ? ?// TODO 实现拖拽

? ? ? ?return false;

? ?}

});

2. 处理触摸事件:

int lastX, lastY;

@Override

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

lastX = (int) event.getRawX();

lastY = (int) event.getRawY();

break;

case MotionEvent.ACTION_MOVE:

int dx = (int) (event.getRawX() - lastX);

int dy = (int) (event.getRawY() - lastY);

mParams.x += dx;

mParams.y += dy;

windowManager.updateViewLayout(mFloatingView, mParams);

lastX = (int) event.getRawX();

lastY = (int) event.getRawY();

break;

default:

break;

}

return false;

}

代码中,使用两个变量记住触摸前的坐标,然后处理移动事件时计算移动距离,然后根据移动距离来更新悬浮窗。

2.2 实现浮窗关闭

用户可以通过关闭按钮来关闭悬浮窗。实现方法如下:

1. 添加关闭按钮:

在悬浮窗视图中,添加一个关闭按钮的布局:


? ?android:id="@+id/layout_close"

? ?android:layout_width="wrap_content"

? ?android:layout_height="wrap_content"

? ?android:layout_alignParentRight="true"

? ?android:layout_marginRight="15dp"

? ?android:layout_marginTop="15dp">

? ?

? ? ? ?android:id="@+id/image_close"

? ? ? ?android:layout_width="wrap_content"

? ? ? ?android:layout_height="wrap_content"

? ? ? ?android:src="@drawable/close"

? ? ? ?/>

2. 设置关闭按钮监听:

mCloseBtn = (ImageView) mFloatingView.findViewById(R.id.image_close);

mCloseBtn.setOnClickListener(new View.OnClickListener() {

? ?@Override

? ?public void onClick(View v) {

? ? ? ?windowManager.removeView(mFloatingView);

? ?}

});

其中,mCloseBtn 为关闭按钮。

2.3 实现浮窗弹出菜单

在悬浮窗中,可以弹出菜单。弹出菜单的实现方法如下:

1. 添加弹出菜单:

在悬浮窗视图中,添加一个弹出菜单的布局:


? ?android:layout_width="wrap_content"

? ?android:layout_height="wrap_content">

? ?

? ? ? ?android:id="@+id/image_menu"

? ? ? ?android:layout_width="wrap_content"

? ? ? ?android:layout_height="wrap_content"

? ? ? ?android:src="@drawable/menu"

? ? ? ?/>

? ?

? ? ? ?android:id="@+id/layout_menu"

? ? ? ?android:layout_width="150dp"

? ? ? ?android:layout_height="100dp"

? ? ? ?android:layout_marginTop="50dp"

? ? ? ?android:background="@android:color/white"

? ? ? ?android:visibility="gone">

? ? ? ?

? ? ? ? ? ?android:id="@+id/menu_item1"

? ? ? ? ? ?android:layout_width="wrap_content"

? ? ? ? ? ?android:layout_height="wrap_content"

? ? ? ? ? ?android:textColor="@android:color/black"

? ? ? ? ? ?android:text="菜单项1"/>

? ? ? ?

? ? ? ? ? ?android:id="@+id/menu_item2"

? ? ? ? ? ?android:layout_width="wrap_content"

? ? ? ? ? ?android:layout_height="wrap_content"

? ? ? ? ? ?android:textColor="@android:color/black"

? ? ? ? ? ?android:text="菜单项2"/>

? ? ? ?

? ? ? ? ? ?android:id="@+id/menu_item3"

? ? ? ? ? ?android:layout_width="wrap_content"

? ? ? ? ? ?android:layout_height="wrap_content"

? ? ? ? ? ?android:textColor="@android:color/black"

? ? ? ? ? ?android:text="菜单项3"/>

? ?

2. 设置菜单按钮监听:

mMenuBtn = (ImageView) mFloatingView.findViewById(R.id.image_menu);

mMenuBtn.setOnClickListener(new View.OnClickListener() {

? ?@Override

? ?public void onClick(View v) {

? ? ? ?if (mMenuView.getVisibility() == View.GONE) {

? ? ? ? ? ?mMenuView.setVisibility(View.VISIBLE);

? ? ? ?} else {

? ? ? ? ? ?mMenuView.setVisibility(View.GONE);

? ? ? ?}

? ?}

});

3. 设置菜单项监听:

mMenuItem1 = (TextView) mFloatingView.findViewById(R.id.menu_item1);

mMenuItem1.setOnClickListener(new View.OnClickListener() {

? ?@Override

? ?public void onClick(View v) {

? ? ? ?// TODO 处理菜单项1点击事件

? ?}

});

其中,mMenuBtn 为菜单按钮,mMenuItem1 为菜单项。

总结归纳

浮窗在移动应用中发挥着重要的作用,它可以提高应用的用户体验和便利性。添加浮窗功能的关键在于获取悬浮窗权限和实现悬浮窗拖拽、关闭和弹出菜单等功能。本篇文章简要介绍了添加浮窗和实现浮窗的教程,希望对开发者和对浮窗感兴趣的用户能有所帮助。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。站悠网站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

相关内容

  • 爱思助手怎么导入微信表情
  • 爱思助手是一款非常实用的手机同步助手,可以用来导入微信表情,让我们在聊天中更加生动有趣。本文将详细介绍如何通过爱思助手导入微信表情,让你的聊天变得更加热闹。1....
  • 2023-10-24 14:04:25

    1

  • 优服管理怎么接单
  • 随着服务行业的发展,优服管理作为一种新型的服务模式,受到了越来越多的关注和青睐。那么,优服管理如何接单呢?本篇文章将为大家详细讲解该问题。1. 了解优服管理平台...
  • 2024-02-06 11:57:17

    1

  • 火牛视频怎么解绑支付宝
  • 在如今这个信息时代,线上视频平台为人们的日常生活带来了极大的便利。火牛视频就是其中一款非常受欢迎的在线观影软件,它的付费方式包括支付宝等电子支付方式。如果你需要...
  • 2023-10-27 10:46:22

    1

  • 随手记手机版怎么隐藏账户
  • 随手记手机版是一款非常实用的财务管理软件,我们可以在其中记录自己的收入和支出情况,还可以为不同的账户进行分类管理。但是在一些特殊情况下,我们希望将某些账户隐藏起...
  • 2023-08-28 16:31:39

    21

  • 企业微信班级群怎么转让群主
  • 导读:企业微信已经成为了企业办公和沟通的必备工具,同时也可以用于家长、老师、学生之间的班级交流。在使用企业微信班级群聊时,有时候群主需要转让群主身份,本文将详细...
  • 2024-02-07 12:44:34

    1

  • 美柚APP怎么退出不喜欢的圈子
  • 美柚是一个女性导向的社交电商APP,用户可以在上面购物,参与达人直播,加入感兴趣的圈子,与其他用户交流等。但是,有时候我们可能加入了一些不合适的圈子,或者不再感...
  • 2023-09-27 14:18:32

    1