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

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 为菜单项。

总结归纳

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

相关内容

  • 酷狗音乐怎么设置新消息提醒
  • 酷狗音乐是国内一款很受欢迎的音乐播放器,可以听现在最流行的歌曲、热门音乐、MV、电台等。在日常生活中,我们可能会错过酷狗音乐的新消息,而导致无法及时获取最新资讯...
  • 2023-08-15 16:22:23

    25

  • 时尚芭莎APP注销账号方法介绍
  • 现在,随着更加快捷的网络服务和智能手机的普及,越来越多的人使用APP来完成生活中的各种任务。然而,大部分用户可能会有换号或者注销账号的需求。本文就来介绍一下,如...
  • 2023-08-21 11:31:45

    1

  • 辣椒快打怎么连接电视
  • 辣椒快打是一款经典的街机格斗游戏,对于喜欢打游戏的人来说肯定耳熟能详。但是有些玩家不想只在小屏幕上玩游戏,他们希望将辣椒快打连接到电视上,享受更大屏幕的游戏体验...
  • 2023-09-07 16:25:31

    1

  • 快看漫画开启相册访问权限的方法
  • 介绍快看漫画是一款广受欢迎的漫画阅读应用,用户可以在其中找到各种类型的漫画作品。有时候,为了更好地使用该应用,用户需要开启相册访问权限。本文将详细介绍如何在快看...
  • 2024-08-04 11:32:11

    1