简介
自定义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

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





