iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >autojs模仿QQ长按弹窗菜单怎么实现
  • 100
分享到

autojs模仿QQ长按弹窗菜单怎么实现

2023-07-05 00:07:24 100人浏览 独家记忆
摘要

本篇内容主要讲解“autojs模仿QQ长按弹窗菜单怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“autojs模仿QQ长按弹窗菜单怎么实现”吧!分析弹框菜单圆角列表, 类似grid箭头位于

本篇内容主要讲解“autojs模仿QQ长按弹窗菜单怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“autojs模仿QQ长按弹窗菜单怎么实现”吧!

分析弹框菜单

  • 圆角

  • 列表, 类似grid

  • 箭头位于文字中间上(下)方

需求分析

如果要写一个这样的教程, 我们需要做什么

  • 写一个列表, 用来触发长按选项

  • 写一个弹窗菜单

代码分析

列表怎么写

先来一个最简单的布局代码

"nodejs ui";require("rhino").install();const ui = require("ui");class MainActivity extends ui.Activity {  constructor() {    super();    this.items = [];    for (var i = 10; i < 100; i++) {      this.items.push(randomStr(i + 1));    }  }  get layoutXmlFile() {    return "layout.xml";  }  onContentViewSet() {}}ui.setMainActivity(MainActivity);

layout.xml文件内容, 就一个recyclerview

<column><Androidx.recyclerview.widget.RecyclerView id="recyclerView" padding='12' layout_width="match_parent" layout_height="match_parent"></androidx.recyclerview.widget.RecyclerView></column>

RecyclerView基础代码

在onContentViewSet这个方法中, 我们去写列表, 列表设置adapter即可;

我们要创建自己的Adapter类, 继承自RecyclerView.Adapter

class MyAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter {}

这里用MyAdapter命名合适吗? 不合适, 如果你以后也用了MyAdapter, 那么可能造成类名冲突, 所以, 我们改个名字, 我们是在测试, 因此就叫 TestReayclerViewAdapter

还有一点是, 因为我们要写两个类, 还有一个文件实例化两个类, 因此我们把这个三个文件放到同一个文件夹

autojs模仿QQ长按弹窗菜单怎么实现

我们自顶向下来写代码, 首先我们写的是setTestRecyclerViewAdapter.js, 他这个里面要做几件事:

  • 加载两个类, Adapter和Holder, Holder先加载, 因为他会在Adapter中使用

  • 实例化两个类

类呢, 我们先不写, 我们先写伪代码

setTestRecyclerViewAdapter.js

module.exports=function(recyclerView,items){  await $java.defineClass(TestRecyclerViewViewHolder)  await $java.defineClass(TestRecyclerViewAdapter)  var adapter=new TestRecyclerViewAdapter(items)  recyclerView.setAdapter(adapter)}

这样写怎么样, 有问题吗?

有问题, 如果每次都defineClass, 那么就会报错, 重复定义类, 因此, 我们设置个flag, 类只定义一次

let definedClass = false;module.exports = async function (recyclerView, items) {  if (!definedClass) {    await $java.defineClass(TestRecyclerViewViewHolder);    await $java.defineClass(TestRecyclerViewAdapter);    definedClass = true;  }  var adapter = new TestRecyclerViewAdapter(items);  recyclerView.setAdapter(adapter);};

这样就没问题了, 接下来我们写TestRecyclerViewAdapter, 为什么先写他呢, 前面说过了, 我们是自顶向下写,

TestRecyclerViewAdapter里面要写什么呢? 重写三个方法

  • onCreateViewHolder

  • onBindViewHolder

  • getItemCount

  • getItemViewType

TestRecyclerViewAdapter.js

const ui = require("ui");class TestRecyclerViewAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter {  constructor(data) {    super();    this.data = data;  }  onCreateViewHolder(parent) {    return new TestRecyclerViewViewHolder(ui.inflateXml(parent.getContext(), holderXml, parent));  }  onBindViewHolder(holder, position) {    holder.bind(this.data[position], position);  }  getItemCount() {    return this.data.length;  }  getItemViewType() {    return 0;  }}module.exports = TestRecyclerViewAdapter;

这个代码里面, 唯一需要变动的地方是holderXml

接下来该写TestRecyclerViewViewHolder

class TestRecyclerViewViewHolder extends androidx.recyclerview.widget.RecyclerView.ViewHolder {  constructor(itemView) {    super(itemView);  }  bind(item) {    this.itemView.attr("text", item);    this.item = item;  }}module.exports = TestRecyclerViewViewHolder;

到这里为止, 一个recyclerview的骨架就成型了, 先看看效果

autojs模仿QQ长按弹窗菜单怎么实现

最简单的列表就是如此, 我们给他润色一下, 字体放大, 再加个圆角背景

autojs模仿QQ长按弹窗菜单怎么实现

列表有了, 接下来我们要考虑弹框的事情了, 那么第一个考虑的点就是, 长按事件

长按事件

长按事件在哪个文件写呢?

我们既可以在Adapter中写, 也可以在Holder中写,

如果在Holder中写, 那么我们就要把长按的方法, 从Adapter传给Holder, 我们需要多写几个字幕母, 因此我选择在Adapter中写长按事件

TestRecyclerViewAdapter.js 中 修改 onCreateViewHolder 方法即可

  onCreateViewHolder(parent) {    let testRecyclerViewViewHolder = new TestRecyclerViewViewHolder(ui.inflateXml(parent.getContext(), holderXml, parent));    testRecyclerViewViewHolder.itemView.setOnLonGClickListener(() => {      console.log("你长按了我: " + testRecyclerViewViewHolder.item);      return true;    });    return testRecyclerViewViewHolder;  }

长按事件可能是多种多样的, 因此, 我们在TestRecyclerViewAdapter.js中, 增加一个方法setLongClick

  setLongClick(longClick) {    this.longClick = longClick;  }

相应的修改onCreateViewHolder代码

  onCreateViewHolder(parent) {    let testRecyclerViewViewHolder = new TestRecyclerViewViewHolder(ui.inflateXml(parent.getContext(), holderXml, parent));    testRecyclerViewViewHolder.itemView.setOnLongClickListener(() => {      this.longClick();      return true;    });    return testRecyclerViewViewHolder;  }

setTestRecyclerViewAdapter.js中的代码要添加一行

adapter.setLongClick(() => console.log("this is long click"));

代码修改了一些以后, 就应该测试一下, 测试正常以后, 再进行下一步操作, 小幅迭代

点击后出现弹框, 我们先不管菜单, 先弹个框出来

我们创建一个文件: showMenuWindow.js

const ui = require("ui");const PopupWindow = android.widget.PopupWindow;const ViewGroup = android.view.ViewGroup;function showMenuWindow(view) {  let popMenuWindow = ui.inflateXml(    view.getContext(),    `    <column>    <button id="btn1" text="btn1" />    </column>    `,    null  );  let mPopWindow = new PopupWindow(popMenuWindow, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);  mPopWindow.setOutsideTouchable(true);  mPopWindow.showAsDropDown(view);}module.exports = showMenuWindow;

然后在setTestRecyclerViewAdapter.js文件中调用他

adapter.setLongClick(showMenuWindow);

因此showMenuWindow有一个参数view, 就是你长按的那个view, 所以我们还要去Adapter中修改setLongClick

    testRecyclerViewViewHolder.itemView.setOnLongClickListener(() => {      this.longClick(testRecyclerViewViewHolder.itemView);      return true;    });

autojs模仿QQ长按弹窗菜单怎么实现

到此,相信大家对“autojs模仿QQ长按弹窗菜单怎么实现”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: autojs模仿QQ长按弹窗菜单怎么实现

本文链接: https://www.lsjlt.com/news/348694.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • autojs模仿QQ长按弹窗菜单怎么实现
    本篇内容主要讲解“autojs模仿QQ长按弹窗菜单怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“autojs模仿QQ长按弹窗菜单怎么实现”吧!分析弹框菜单圆角列表, 类似grid箭头位于...
    99+
    2023-07-05
  • autojs模仿QQ长按弹窗菜单实现示例
    目录分析弹框菜单需求分析代码分析RecyclerView基础代码长按事件环境 分析弹框菜单 圆角列表, 类似grid箭头位于文字中间上(下)方 需求分析 如果要写一个这样的教程, ...
    99+
    2023-01-28
    autojs 长按弹窗 autojs QQ长按弹窗菜单
  • autojs模仿QQ长按弹窗菜单实现示例详解二
    目录引言弹窗菜单箭头如何确认箭头方向调整popwindow的位置调用方法如下绘制箭头修改颜色和圆角给弹框菜单添加点击事件弹框菜单点击事件引用弹框实例环境引言 上一节讲了列表和长按事...
    99+
    2023-01-28
    autojs模仿QQ长按弹窗菜单 autojs QQ长按弹窗
  • autojs如何实现长按弹窗菜单功能
    本篇内容主要讲解“autojs如何实现长按弹窗菜单功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“autojs如何实现长按弹窗菜单功能”吧!弹窗菜单由粗到细, 自顶向下的写代码我们现在要修改的...
    99+
    2023-07-05
  • android长按弹出菜单怎么实现
    要实现Android长按弹出菜单,可以按照以下步骤进行操作:1. 在你的Activity中,为你想要实现长按弹出菜单的View注册一...
    99+
    2023-08-12
    android
  • Android中怎么实现长按弹出上下文菜单功能
    本篇文章为大家展示了Android中怎么实现长按弹出上下文菜单功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在程序合适位置给一个控件注册上下文菜单组件可以是按钮,文本框,还可以是列表条目,下以l...
    99+
    2023-05-31
    android
  • IOS开发仿微信消息长按气泡菜单实现效果
    目录正文使用方法导入项目使用对比微信实现效果正文 话不多说,直接上效果图 使用方法 导入项目 代码地址:github.com/shangjie119… 将SJPopM...
    99+
    2024-04-02
  • vant/vue手机端长按事件以及禁止长按弹出菜单实现方法详解
    vant/vue实现手机端长按事件 先给两个事件 @touchstart="start" @touchend="end"  因为vue里的touc...
    99+
    2022-12-24
    vant/vue手机端长按事件实现方法 vue手机端禁止长按弹出菜单实现方法
  • Android怎么实现底部弹出按钮菜单升级版
    这篇文章主要介绍Android怎么实现底部弹出按钮菜单升级版,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下只贴出关键代码 case R.id.myself_share: &n...
    99+
    2023-05-30
    android
  • Android长按弹出选项框效果怎么实现
    要实现Android长按弹出选择框的效果,可以按照以下步骤进行操作:1. 在你的布局文件中,添加一个长按触发的控件,例如一个Butt...
    99+
    2023-08-20
    Android
  • Bootstrap怎么实现按钮式下拉菜单
    这篇文章主要介绍“Bootstrap怎么实现按钮式下拉菜单”,在日常操作中,相信很多人在Bootstrap怎么实现按钮式下拉菜单问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Bootstrap怎么实现按钮式下...
    99+
    2023-06-27
  • CSS中怎么实现二级弹出菜单效果
    这篇文章将为大家详细讲解有关CSS中怎么实现二级弹出菜单效果,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。具体代码如下:<!DOCTYPE ...
    99+
    2024-04-02
  • DirectUI实现右键弹出菜单的代码怎么写
    要实现右键弹出菜单,可以按照以下步骤进行操作: 定义一个菜单控件,例如ContextMenu。 在需要弹出菜单的控件上,添加鼠标右...
    99+
    2023-10-24
    DirectUI
  • Android中怎么通过自定义View 实现QQ侧滑菜单
    这期内容当中小编将会给大家带来有关Android中怎么通过自定义View 实现QQ侧滑菜单,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。布局代码<fierce_luk.com.sideslipvie...
    99+
    2023-05-30
    android view
  • Android中怎么实现长按返回键弹出关机框功能
    Android中怎么实现长按返回键弹出关机框功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。找到PhoneWindowManager.java文件,在fram...
    99+
    2023-05-30
    android
  • java多级菜单模糊查询怎么实现
    要实现 Java 多级菜单的模糊查询,可以使用递归的方式来遍历菜单结构,然后根据输入的关键词来筛选匹配的菜单项。 以下是一个简单的示...
    99+
    2024-03-13
    java
  • 纯CSS怎么实现微信小程序仿QQ顶部提示弹框动画效果
    这篇文章将为大家详细讲解有关纯CSS怎么实现微信小程序仿QQ顶部提示弹框动画效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果思路 用css的animation属性做动画代码wxml:<view...
    99+
    2023-06-08
  • vue.extend中怎么实现一个alert模态框弹窗组件
    这篇文章将为大家详细讲解有关vue.extend中怎么实现一个alert模态框弹窗组件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。alert.js文件代码...
    99+
    2024-04-02
  • 怎么使用contextMenu插件实现Bootstrap table弹出右键菜单
    这篇文章给大家分享的是有关怎么使用contextMenu插件实现Bootstrap table弹出右键菜单的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码(test.html)...
    99+
    2024-04-02
  • 怎么用css实现鼠标经过弹出子菜单特效
    这篇文章主要讲解了“怎么用css实现鼠标经过弹出子菜单特效”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用css实现鼠标经过弹出子菜单特效”吧!<...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作