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

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-11-21 11:51:17

    1

  • 腾讯会议快速会议的方法
  • 下载并安装腾讯会议首先,您需要从腾讯会议的官方网站下载适用于您设备的客户端。安装完成后,打开腾讯会议应用程序。注册或登录打开腾讯会议应用后,您可以选择使用微信、...
  • 2024-09-21 10:05:28

    2

  • 酷狗音乐怎么申请成为音乐人
  • 如果你是一位有音乐梦想的小伙伴,或者你是一个已经有一定音乐创作能力的音乐人,想要在网络上发扬光大自己的音乐作品,那么申请成为酷狗音乐的音乐人将是一个不错的选择。...
  • 2023-08-16 09:41:10

    34

  • 得物怎么收藏商品
  • 在得物上收藏商品是一项非常方便的功能,它可以让你方便地跟踪喜欢的商品,也能帮助你寻找其他可能感兴趣的商品。本文将向您介绍如何在得物上收藏商品。1.注册得物账号在...
  • 2024-01-10 10:34:17

    1

  • 宥马运动如何申诉
  • 导读:宥马运动作为一款智能手环品牌,受到了广大运动健身爱好者的追捧。无论是跑步、骑行、游泳还是瑜伽,它都能记录用户的运动数据。但在实际使用中,也会出现一些问题,...
  • 2024-01-18 13:15:17

    1

  • 拼多多打开步数记录步骤教程
  • 步骤一:打开拼多多应用首先,确保您的手机上已经安装了拼多多应用。如果尚未安装,可以前往应用商店下载并安装。安装完成后,点击图标打开拼多多应用。步骤二:登录您的拼...
  • 2024-08-14 16:13:45

    1