Harmony鸿蒙实现隐私政策自定义弹窗

Harmony鸿蒙实现隐私政策自定义弹窗
这个跟之前的,类AlertDialog的CommonDialog是一样的,不过这个是可以自定义布局的
效果如下:
在这里插入图片描述
一、新建一个PrivacyDialog

public class PrivacyDialog extends CommonDialog {
    private static final HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00201, "MY_TAG");
    private Component customComponent;
    private Context context;
    private Component tv_term_tips;
    private Component tv_privacy_tips;
    private Component btn_enter;
    private Component btn_exit;

    private ClickListener clickListener;

    public PrivacyDialog(Context abilityContext) {
        super(abilityContext);
        this.context = abilityContext;
        initComponents();
        setAlignment(TextAlignment.CENTER);
        setSize(850, 1200);
        setTransparent(true);
    }

    private void initComponents() {
        customComponent = LayoutScatter.getInstance(context)
                .parse(ResourceTable.Layout_dialog_privacy, null, true);
        tv_term_tips = customComponent.findComponentById(ResourceTable.Id_tv_term_tips);
        tv_privacy_tips = customComponent.findComponentById(ResourceTable.Id_tv_privacy_tips);
        btn_enter = customComponent.findComponentById(ResourceTable.Id_btn_enter);
        btn_exit = customComponent.findComponentById(ResourceTable.Id_btn_exit);
        super.setContentCustomComponent(customComponent);
        confirm();
    }
    private void confirm() {
        tv_term_tips.setClickedListener(component -> {
            if (clickListener != null) {
                clickListener.onTermListener("点了协议");
            }
            HiLog.debug(LABEL,"点了协议");
        });
        tv_privacy_tips.setClickedListener(component -> {
            if (clickListener != null) {
                clickListener.onPrivacyListener("点了隐私");
            }
            HiLog.debug(LABEL,"点了隐私");
        });
        btn_enter.setClickedListener(component -> {
            if (clickListener != null) {
                clickListener.onEnterListener("点了同意");
            }
            HiLog.debug(LABEL,"点了同意");
        });
        btn_exit.setClickedListener(component -> {
            if (clickListener != null) {
                clickListener.onExitListener("点了退出");
            }
            HiLog.debug(LABEL,"点了退出");
        });
    }

    public void setOnClickListener(ClickListener term) {
        clickListener = term;
    }


    //拦截返回键
    @Override
    public boolean deliverKeyboardCase(KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEY_BACK) {//拦截系统返回事件
            return true;
        }
        return super.deliverKeyboardCase(event);
    }
}

二、新建ClickListener

public interface ClickListener {
    void onTermListener(String string);
    void onPrivacyListener(String string);
    void onEnterListener(String string);
    void onExitListener(String string);
}

三、config配置跳转

"actions": [
              "action.system.home",
              "ability.intent.ACTION_PRIVACY_TERM"
            ]

四、添加路由

addActionRoute("ability.intent.ACTION_PRIVACY_TERM", PrivacyTermAbilitySlice.class.getName());

五、实现

public static void showprivate(AbilitySlice abilitySlice){
        PrivacyDialog privacyDialog = new PrivacyDialog(abilitySlice);
        privacyDialog.setOnClickListener(new ClickListener() {
            @Override
            public void onTermListener(String string) {
            //这里之前用present,这个弹窗不会隐藏,论坛问了要用这个startAbility
                Intent intent = new Intent();
                Operation operation = new Intent.OperationBuilder()
                        .withAction("ability.intent.ACTION_PRIVACY_TERM")
                        .build();
                intent.setParam("type","term");
                intent.setOperation(operation);
                abilitySlice.startAbility(intent);
            }

            @Override
            public void onPrivacyListener(String string) {

                Intent intent = new Intent();
                Operation operation = new Intent.OperationBuilder()
                        .withAction("ability.intent.ACTION_PRIVACY_TERM")
                        .build();
                intent.setParam("type","privacy");
                intent.setOperation(operation);
                abilitySlice.startAbility(intent);
            }

            @Override
            public void onEnterListener(String string) {
                SpUtils.put(abilitySlice,true);
                privacyDialog.destroy();
            }

            @Override
            public void onExitListener(String string) {
                SpUtils.put(abilitySlice,false);
                abilitySlice.terminate();
            }
        });
        privacyDialog.siteRemovable(true);
        privacyDialog.setSwipeToDismiss(true);
        privacyDialog.show();
    }

六、调用

CheckUtils.showprivate(MainAbilitySlice.this);

如果写得不规范,有错误请指出,希望能帮到有需要的同学

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值