FloatMenu API完全指南:从基础方法到高级参数的全面掌握

发布时间:2026/7/31 20:31:34
FloatMenu API完全指南:从基础方法到高级参数的全面掌握 FloatMenu API完全指南从基础方法到高级参数的全面掌握【免费下载链接】FloatMenuSampleandroid 悬浮窗菜单可在launcher或app中使用项目地址: https://gitcode.com/gh_mirrors/fl/FloatMenuSampleFloatMenu是一款功能强大的Android悬浮窗菜单库可在launcher或app中灵活使用。本指南将帮助你从基础到高级全面掌握FloatMenu API让你能够轻松实现各种悬浮菜单效果。为什么选择FloatMenuFloatMenu提供了简洁易用的API接口通过合理的默认值设置让大多数场景下只需3-4行代码就能实现一个功能完善的悬浮菜单。与传统实现方式相比FloatMenu大大简化了开发流程提高了开发效率。新旧API对比旧API啰嗦版FloatLogoMenu floatMenu new FloatLogoMenu.Builder() .withActivity(this) .logo(BitmapFactory.decodeResource(getResources(), R.drawable.logo)) .drawCicleMenuBg(true) .backMenuColor(0xffe4e3e1) .setBgDrawable(getResources().getDrawable(R.drawable.bg)) .setFloatItems(itemList) .defaultLocation(FloatLogoMenu.RIGHT) .drawRedPointNum(false) .showWithListener(listener);代码行数~12行问题不清楚哪些是必须的、哪些是可选的新API极简版FloatMenu.create(this) .logo(R.drawable.logo) .items(itemList) .show();代码行数3行优点简洁、清晰、默认值合理快速开始3种基础实现方式1. 极简用法无监听ListFloatItem items new ArrayList(); items.add(new FloatItem(首页, R.drawable.icon_home)); items.add(new FloatItem(客服, R.drawable.icon_service)); items.add(new FloatItem(消息, R.drawable.icon_msg)); FloatMenu.create(activity) .logo(R.drawable.logo) .items(items) .show();2. 标准用法带监听FloatMenu.create(activity) .logo(R.drawable.logo) .items(items) .listener(new FloatMenuView.OnMenuClickListener() { Override public void onItemClick(int position, String title) { Toast.makeText(activity, 点击了: title, Toast.LENGTH_SHORT).show(); } Override public void dismiss() { // 菜单关闭回调 } }) .show();3. Service中使用public class FloatMenuService extends Service { private FloatLogoMenu mFloatMenu; Override public int onStartCommand(Intent intent, int flags, int startId) { if (mFloatMenu null) { ListFloatItem items new ArrayList(); items.add(new FloatItem(首页, R.drawable.icon_home)); // 使用Application Context mFloatMenu FloatMenu.create(getApplicationContext()) .logo(R.drawable.logo) .items(items) .location(FloatMenu.LEFT) .show(); } return START_STICKY; } }核心API详解FloatMenu.create()作用创建FloatMenu构建器重载方法create(Activity activity)- 用于Activity中create(Context context)- 用于Service或需要Application Context的场景必选方法方法说明logo(int resId)设置logo图标资源IDlogo(Bitmap bitmap)设置logo图标Bitmapitems(ListFloatItem)设置菜单项列表show()显示悬浮菜单可选配置方法方法默认值说明listener(OnMenuClickListener)null设置点击监听location(int)RIGHT停靠位置LEFT/RIGHTautoShrink(int)3000ms自动贴边延时0不贴边showRedDot(boolean)false是否显示红点数字drawCircleBg(boolean)true是否绘制圆形背景backgroundColor(int)系统默认背景颜色backgroundDrawable(Drawable)系统默认背景Drawable高级参数配置停靠位置设置.location(FloatMenu.LEFT) // 左侧 .location(FloatMenu.RIGHT) // 右侧默认自动贴边设置.autoShrink(0) // 不自动贴边 .autoShrink(3000) // 3秒后自动贴边默认 .autoShrink(5000) // 5秒后自动贴边红点显示设置.showRedDot(false) // 不显示红点数字默认 .showRedDot(true) // 显示红点数字根据FloatItem.dotNum高级配置示例FloatMenu.create(context) .logo(R.drawable.logo) .items(items) .location(FloatMenu.LEFT) // 停靠在左侧 .autoShrink(5000) // 5秒后自动贴边 .showRedDot(true) // 显示红点数字 .backgroundColor(0xFF4CAF50) // 绿色背景 .backgroundDrawable(drawable) // 自定义背景 .drawCircleBg(true) // 绘制圆形背景 .listener(listener) .show();FloatItem详解FloatItem是悬浮菜单项的实体类有多种构造方法可供选择// 方法1只有标题 FloatItem(String title) // 方法2标题 图标资源ID FloatItem(String title, int drawableId) // 方法3标题 图标Bitmap FloatItem(String title, Bitmap bitmap) // 方法4完整参数 FloatItem(String title, int pressColor, int normalColor, Bitmap icon, String dotNum)最佳实践Activity生命周期管理public class MainActivity extends Activity { private FloatLogoMenu mFloatMenu; Override protected void onResume() { super.onResume(); if (mFloatMenu null) { mFloatMenu FloatMenu.create(this) .logo(R.drawable.logo) .items(items) .show(); } } Override protected void onPause() { super.onPause(); if (mFloatMenu ! null) { mFloatMenu.hide(); } } Override protected void onDestroy() { if (mFloatMenu ! null) { mFloatMenu.destroyFloat(); mFloatMenu null; } super.onDestroy(); } }权限处理Service悬浮窗private void startFloatMenuService() { if (Build.VERSION.SDK_INT Build.VERSION_CODES.M) { if (!Settings.canDrawOverlays(this)) { Toast.makeText(this, 请先开启悬浮窗权限, Toast.LENGTH_LONG).show(); Intent intent new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse(package: getPackageName())); startActivityForResult(intent, REQUEST_CODE); return; } } // 启动Service Intent intent new Intent(this, FloatMenuService.class); startService(intent); }实际效果展示常见问题解答Q: 如何在Activity和Service中都使用悬浮菜单A: 使用不同的配置区分Activity使用FloatMenu.RIGHT灰色背景Service使用FloatMenu.LEFT彩色背景Q: 如何防止Activity和Service的悬浮球冲突A: 在启动Service前销毁Activity的悬浮球在停止Service后恢复// 启动Service private void startFloatMenuService() { destroyFloat(); // 先销毁Activity的悬浮球 startService(new Intent(this, FloatMenuService.class)); } // 停止Service private void stopFloatMenuService() { stopService(new Intent(this, FloatMenuService.class)); new Handler().postDelayed(() - { mFloatMenu null; // 延迟恢复Activity的悬浮球 }, 500); }Q: 新API和旧API有什么区别A:新API更简洁3行 vs 12行新API有合理的默认值新API方法命名更清晰旧API仍然可用向后兼容迁移指南从旧API到新API旧代码mFloatMenu new FloatLogoMenu.Builder() .withActivity(this) .logo(BitmapFactory.decodeResource(getResources(), R.drawable.logo)) .drawCicleMenuBg(true) .backMenuColor(0xffe4e3e1) .setBgDrawable(getResources().getDrawable(R.drawable.bg)) .setFloatItems(items) .defaultLocation(FloatLogoMenu.RIGHT) .drawRedPointNum(false) .showWithListener(listener);新代码mFloatMenu FloatMenu.create(this) .logo(R.drawable.logo) .items(items) .listener(listener) .show();简化量从12行减少到5行减少60%开始使用FloatMenu要开始使用FloatMenu请先克隆仓库git clone https://gitcode.com/gh_mirrors/fl/FloatMenuSampleFloatMenu提供了简洁而强大的API让你能够轻松实现各种悬浮菜单效果。无论是简单的快捷操作还是复杂的交互界面FloatMenu都能满足你的需求。通过本指南你已经掌握了FloatMenu的核心API和最佳实践现在就开始在你的项目中使用它吧【免费下载链接】FloatMenuSampleandroid 悬浮窗菜单可在launcher或app中使用项目地址: https://gitcode.com/gh_mirrors/fl/FloatMenuSample创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考