Android 通用带箭头提示窗

本文介绍了如何在Android中创建一个自定义的PopupWindow,该窗口具有指向锚点控件的箭头背景,并能自动调整显示位置。它支持设置箭头大小、颜色以及与控件的对齐方式,并提供了示例代码展示如何使用和自定义布局。

简介

自定义PopupWindow, 适用于提示类弹窗。

使用自定义Drawable设置带箭头的背景,测试控件和弹窗的尺寸,自动设置弹窗的显示位置,让箭头指向锚点控件的中间位置,且根据锚点控件在屏幕的位置,自动适配弹窗显示位置。 

适用于描述、解释弹窗。

一、效果

带箭头弹窗显示在控件的左侧,箭头相对控件居中对齐 ,且与控件左边框挨着

 示例代码如下:

二、使用

        GuZhiExplainPupopWindow window = new GuZhiExplainPupopWindow(this);
        //设置弹窗显示文案
        window.setTips("1234567890-34567890-【qweqwertyuiop[sdfghjkl;zxcvbnm,.我们一起走向富强");
        //获取窗口的背景drawable对象
        ArrowsDrawable ad = window.getArrowsDrawable();
        //设置drawable箭头的大小
        ad.setArrowsHeight(ConvertUtils.dp2px(8));
        //设置drawable中箭头与边框距离
        ad.setArrowsPadding(ConvertUtils.dp2px(10));
        //设置drawable的padding, 实际是设置显示文案的TextView的padding
        //ad.setPadding(ConvertUtils.dp2px(10));
        window.setPadding(ConvertUtils.dp2px(10));
        //设置drawable背景色
        ad.setColor(Color.DKGRAY);
        findViewById(R.id.tv33).setOnClickListener(view -> {
            if (!window.isShowing()) {
                //设置窗口显示位置(AUTO_HORIZONTAL 是水平位置,在控件的左侧或右侧,根据控件中心在屏幕中的位置决定)
                window.setShowPosition(GuZhiExplainPupopWindow.AUTO_HORIZONTAL);
                //显示弹窗,偏移量是0,默认是箭头在控件居中位置
                window.show(view, 0, 0);
            }
        });

三、自定义布局

重写initView方法,并设置TipsTv, 同时需要注意的是,在设置弹窗布局时,根布局的宽高属性是wrap_content,设置其它是不生效的,如果需要指定textView的宽或高,或弹窗尺寸,根布局使用某ViewGroup控件,再设置其子控件的尺寸。

        GuZhiExplainPupopWindow window = new GuZhiExplainPupopWindow(this, R.layout.pupopwindow_view_guzhi_explain) {
            @Override
            public void initView(View contentView) {
                //自定义布局初始化控件
                super.initView(contentView);
                TextView customTv = contentView.findViewById(R.id.explain_tv);
                setTipsTv(customTv);
            }
        };

四、源码

package com.ttkx.deviceinfo.bkchart.popupwindow;

import android.content.Co
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值