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

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

总结归纳

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

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

相关内容

  • 腾讯手机管家中查看白名单的操作教程
  • 打开腾讯手机管家应用首先,确保您的手机上已安装最新版本的腾讯手机管家应用。如果还没有安装,可以通过应用商店搜索“腾讯手机管家”并下载。安装完成后,点击图标打开应...
  • 2024-09-22 11:42:09

    1

  • 抖音删除转发作品的操作教程
  • 简介在抖音上,用户可以通过转发功能将自己喜欢的视频分享给好友或其他社交平台。但是,有时候你可能会希望删除已经转发的作品。本文将详细介绍如何在抖音上删除转发的作品...
  • 2024-08-08 10:53:59

    1

  • 钉钉开启消息支持拖拽方法
  • 引言在日常工作中,我们经常需要在钉钉中发送各种消息和文件。为了提高工作效率,钉钉新增了一个功能——支持消息拖拽。本文将详细介绍如何在钉钉中开启和使用这一功能。步...
  • 2024-10-14 12:16:57

    1

  • iphone13pro怎么关闭HDR视频?
  • 步骤一:打开“设置”应用首先,确保你的iPhone 13 Pro已经解锁,并在主屏幕中找到并点击“设置”应用。这个应用通常是一个灰色的齿轮图标。步骤二:进入“相...
  • 2024-06-12 12:09:34

    1

  • 哔哩哔哩双指旋屏手势设置方法
  • 什么是双指旋屏手势双指旋屏手势是指用户在触摸屏设备上用两根手指同时进行旋转操作,从而实现屏幕内容的旋转或其他功能。在哔哩哔哩(Bilibili)应用中,双指旋屏...
  • 2024-07-13 16:37:14

    1