牙叔教程 简单易懂
上一节讲了列表和长按事件
今天讲弹窗菜单
由粗到细, 自顶向下的写代码
我们现在要修改的文件是showMenuWindow.js
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;
我们先修改xml, QQ的弹窗由两部分组成
- 菜单列表
- 箭头
因此, xml如下
<column> <androidx.recyclerview.widget.RecyclerView id="recyclerView" padding="16" layout_width="match_parent" layout_height="match_parent"> </androidx.recyclerview.widget.RecyclerView> <android.view.View id='arrow' ></android.view.View> </column>
这给菜单我们用的也是recyclerView, 因此先设置他的adapter, 如果不会就看上一节课程;
function showMenuWindow(view) {
let popMenuWindow = ui.inflateXml(
...
);
setPopMenuRecyclerViewAdapter(popMenuWindow.recyclerView, []);
...
}
设置Adapter的时候, 第一个参数我们是有的, 第二个参数是adapter要绑定的数据, 现在没有;
这给菜单数据应该有哪些属性呢?
- 菜单显示的文字
- 菜单点后的回调函数
因此, 数据大概是这样的
menus: [
{
name: "复制",
handle: () => {
console.log("复制");
},
},
{
name: "分享",
handle: () => {
console.log("分享");
},
},
],
这种可配置的数据, 我们把它放到config.js中.
数据有了, 接下来我们进入setPopMenuRecyclerViewAdapter方法内部,
提醒一下, 我是复制黏贴的上一节课的setAdapter方法, 因此设置recyclerview的方法大差不差.
setPopMenuRecyclerViewAdapter.js
let definedClass = false;
const PopMenuRecyclerViewViewHolder = require("./PopMenuRecyclerViewViewHolder");
const PopMenuRecyclerViewAdapter = require("./PopMenuRecyclerViewAdapter");
const showMenuWindow = require("../showMenuWindow.js");
module.exports = async function (recyclerView, items) {
if (!definedClass) {
await $java.defineClass(PopMenuRecyclerViewViewHolder);
await $java.defineClass(PopMenuRecyclerViewAdapter);
definedClass = true;
}
var adapter = new PopMenuRecyclerViewAdapter(items);
adapter.setLongClick(showMenuWindow);
recyclerView.setAdapter(adapter);
};
基本上就是复制黏贴, 修改一下类名即可
PopMenuRecyclerViewAdapter.js中, 修改一下holderXml即可

教程详细讲解了如何使用AutoJS模仿QQ的长按弹窗菜单功能,包括设置RecyclerView,处理菜单数据,实现点击事件,动态调整箭头方向,以及处理弹窗消失等逻辑。代码示例涵盖了从XML布局到Java脚本的各个关键部分。
最低0.47元/天 解锁文章
1060

被折叠的 条评论
为什么被折叠?



