123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import { Button } from "android.widget"
- import { INativeButtonContext, CreateNativeButtonContext } from "../interface.uts"
- export class NativeButton {
- $element: UniNativeViewElement;
- constructor(element : UniNativeViewElement) {
- //接收传递过来的UniNativeViewElement
- this.$element = element;
- this.bindView();
- }
- button : Button | null = null;
- bindView() {
- //通过UniElement.getAndroidActivity()获取android平台activity 用于创建view的上下文
- this.button = new Button(this.$element.getAndroidActivity()!); //构建原生view
- //限制原生Button 文案描述不自动大写
- this.button?.setAllCaps(false)
- //监听原生Button点击事件
- this.button?.setOnClickListener(_ => {
- const detail = {}
- //构建自定义UniNativeViewEvent返回对象
- const event = new UniNativeViewEvent("customClick", detail)
- //触发原生Button的点击事件
- this.$element.dispatchEvent(event)
- })
- //UniNativeViewEvent 绑定 安卓原生view
- this.$element.bindAndroidView(this.button!);
- }
- updateText(text : string) {
- //更新原生Button 文案描述
- this.button?.setText(text)
- }
- destroy() {
- //数据回收
- }
- }
- class NativeButtonContext implements INativeButtonContext {
- private button : Button | null = null
- constructor(button : Button) {
- this.button = button
- }
- updateText(text : string) {
- this.button?.setText(text)
- }
- }
- /**
- * 递归查询
- */
- function iterateElement(homeElement : UniElement) : UniElement | null {
- if ("NATIVE-VIEW" == homeElement.nodeName) {
- return homeElement
- }
- for (perChildEle of homeElement.children) {
- let findEle = iterateElement(perChildEle)
- if (findEle != null) {
- return findEle
- }
- }
- return null
- }
- export function createNativeButtonContext(id : string, ins : ComponentPublicInstance | null = null) : INativeButtonContext | null {
- if (ins == null) {
- const pages = getCurrentPages()
- if (pages.length > 0) {
- const page = pages[pages.length - 1]
- const rootViewElement = page.getElementById(id)
- if (rootViewElement != null) {
- /**
- * 找到了root节点,递归检索目标 native-view
- */
- const nativeViewElement = iterateElement(rootViewElement)
- if (nativeViewElement != null) {
- return new NativeButtonContext(nativeViewElement.getAndroidView()! as Button)
- }
- }
- }
- } else {
- /**
- * 尝试迭代遍历
- */
- if (ins.$el != null) {
- const nativeViewElement = iterateElement(ins.$el as UniElement)
- if (nativeViewElement != null) {
- return new NativeButtonContext(nativeViewElement.getAndroidView()! as Button)
- }
- }
- }
- return null
- }
|