// 成功在桌面创建悬浮按钮,但无法点击
let mainActivity = plus.android.runtimeMainActivity();
let mainContext = plus.android.invoke(mainActivity, "getApplicationContext");
let AndroidContext = plus.android.importClass('android.content.Context');
let AndroidWindowManager = plus.android.importClass('android.view.WindowManager');
let windowManager = plus.android.invoke(mainContext, "getSystemService",AndroidContext.WINDOW_SERVICE);
let layoutParams = new AndroidWindowManager.LayoutParams(); // 用于控制控件设置样式
if(windowManager !== null){
// 控件大小
layoutParams.plusSetAttribute('width', 200);
layoutParams.plusSetAttribute('height', 200);
// 设置 type: 控件设置为悬浮窗类型,允许在其他应用和窗口悬浮
let AndroidBuild = plus.android.importClass('android.os.Build');
if(AndroidBuild.VERSION.SDK_INT >= AndroidBuild.VERSION_CODES.O){
// 26及以上必须使用TYPE_APPLICATION_OVERLAY
layoutParams.plusSetAttribute('type', AndroidWindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
}
else{
layoutParams.plusSetAttribute('type', AndroidWindowManager.LayoutParams.TYPE_PHONE);
}
// 设置flags
// FLAG_NOT_TOUCH_MODAL: 使用了此标识,可以将点击事件传递到悬浮窗以外的区域,也就是非按钮区域可以正常点击
layoutParams.plusSetAttribute('flags', AndroidWindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL)
// 背景设置成透明
let AndroidPixelFormat = plus.android.importClass('android.graphics.PixelFormat');
layoutParams.plusSetAttribute('format', AndroidPixelFormat.TRANSPARENT)
// 获取屏幕的宽和高,让控件在屏幕右侧中间悬浮
let screenHeight = plus.screen.height;
let screenWidth = plus.screen.width;
layoutParams.plusSetAttribute('x', screenWidth)
layoutParams.plusSetAttribute('y', screenHeight / 2)
let AndroidGravity = plus.android.importClass('android.view.Gravity');
layoutParams.plusSetAttribute('gravity', AndroidGravity.TOP)
// 新建一个按钮
let btn = plus.android.newObject('android.widget.Button', mainContext);
plus.android.invoke(btn, "setText", "悬浮按钮");
// 添加到屏幕上
plus.android.invoke(windowManager, 'addView', btn, layoutParams);
// 改变按钮位置
let x = screenWidth;
let interval = setInterval(()=>{
layoutParams.plusSetAttribute('x', x-=100);
plus.android.invoke(windowManager, 'updateViewLayout', btn, layoutParams);
}, 500)
// 关闭按钮
setTimeout(()=>{
clearInterval(interval);
plus.android.invoke(windowManager, 'removeView', btn);
}, 10000)
// 要怎么在uni中监听这个按钮的点击事件嘞?
}
2020-08-26 22:10