Android-气泡对话框(根据被点击View位置显示、可定制)

.setOffsetY(8)
.calBar(true)
.show();

当想要输入框随软键盘上移时

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

new BubbleDialog(this)
.addContentView(LayoutInflater.from(this).inflate(R.layout.dialog_view, null))
.setClickedView(mButton12)
.setPosition(mPosition)
.calBar(true)
.softShowUp()
.show();

自定义 BubbleLayout.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

BubbleLayout bl = new BubbleLayout(this);
bl.setBubbleColor(Color.BLUE);
bl.setShadowColor(Color.RED);
bl.setLookLength(Util.dpToPx(this, 54));
bl.setLookWidth(Util.dpToPx(this, 48));
new BubbleDialog(this)
.addContentView(LayoutInflater.from(this).inflate(R.layout.dialog_view5, null))
.setClickedView(mButton8)
.setPosition(mPosition)
.calBar(true)
.setBubbleLayout(bl)
.show();

自定义 BubbleDialog,可交互的 BubbleDialog.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1、布局

<?xml version="1.0" encoding="utf-8"?>

2、自定义 BubbleDialog

/**

  • 自定义可操作性dialog
  • Created by JiajiXu on 17-12-11.
    */

public class CustomOperateDialog extends BubbleDialog implements View.OnClickListener {
private ViewHolder mViewHolder;
private OnClickCustomButtonListener mListener;

public CustomOperateDialog(Context context) {
super(context);
calBar(true);
setTransParentBackground();
setPosition(Position.TOP);
View rootView = LayoutInflater.from(context).inflate(R.layout.dialog_view4, null);
mViewHolder = new ViewHolder(rootView);
addContentView(rootView);
mViewHolder.btn13.setOnClickListener(this);
mViewHolder.btn14.setOnClickListener(this);
mViewHolder.btn15.setOnClickListener(this);
}

@Override
public void onClick(View v) {
if (mListener != null)
{
mListener.onClick(((Button)v).getText().toString());
}
}

private static class ViewHolder {
Button btn13, btn14, btn15;
public ViewHolder(View rootView) {
btn13 = rootView.findViewById(R.id.button13);
btn14 = rootView.findViewById(R.id.button14);
btn15 = rootView.findViewById(R.id.button15);
}
}

public void setClickListener(OnClickCustomButtonListener l) {
this.mListener = l;
}

public interface OnClickCustomButtonListener {
void onClick(String str);
}
}

3、显示

CustomOperateDialog codDialog = new CustomOperateDialog(this)
.setPosition(mPosition)
.setClickedView(mButton10);
codDialog.setClickListener(new CustomOperateDialog.OnClickCustomButtonListener()
{
@Override
public void onClick(String str) {
mButton10.setText(“点击了:” + str);
}
});
codDialog.show();

查看关于BappyDialog的使用代码

TestDialogActivity 代码

写法建议

根据@hm该朋友在文章中反馈的多次点击后位置不对的问题,是由于多次对BappyDialog进行了设置导致,所以建议下方写法。(当然如果对重复调用setClickedView()方法设置不同的被点击的控件来更新位置有需要,是需要写在外面的。)

if(mBubbleDialog == null)
{
mBubbleDialog = new BubbleDialog(this)
.addContentView(LayoutInflater.from(this).inflate(R.layout.dialog_view3, null))
.setClickedView(mButton4)
.setPosition(mPosition)
.setOffsetY(8)
.calBar(true);
}
mBubbleDialog.show();


如何使用 HappyBubble-BubbleLayout?

在XML代码中设置属性值

属性参照表

属性描述
lookAtleft, top, right, bottom箭头指向
lookLengthdimension箭头的长度
lookPositiondimension箭头相对于x或y轴的位置
lookWidthdimension箭头的宽度
bubbleColorcolor气泡的颜色
bubbleRadiusdimension气泡四角的圆弧
bubblePaddingdimension气泡边缘到内容的距离
shadowRadiusdimension阴影的扩散大小
shadowXdimension阴影在x轴方向的偏移
shadowYdimension阴影在y轴方向的偏移
shadowColorcolor阴影的颜色

xml 例子

<com.xujiaji.happybubble.BubbleLayout
xmlns:app=“http://schemas.android.com/apk/res-auto”
android:id=“@+id/bubbleLayout”
android:layout_width=“match_parent”
android:layout_height=“200dp”
android:layout_margin=“16dp”
app:lookAt=“left”
app:lookLength=“16dp”
app:lookPosition=“20dp”
app:lookWidth=“16dp” />

在java代码中定义属性值。

BubbleLayout 通过“set属性名”方法和invalidate方法来更新BubbleLayout。

mBubbleLayout.setLook(BubbleLayout.Look.LEFT);

查看更多

MainActivity 代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Demo 下载

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

](https://github.com/xujiaji/HappyBubble/releases)

感谢您的使用、Star与建议!


最后

由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python Tkinter是一种GUI编程库,可以用于创建各种用户界面,包括聊天气泡对话框。实现聊天气泡对话框的方法如下: 1. 导入Tkinter模块 ```python import tkinter as tk ``` 2. 创建主窗口 ```python root = tk.Tk() ``` 3. 创建一个Frame框架,用于显示聊天气泡 ```python frame = tk.Frame(root) frame.pack() ``` 4. 创建一个文本框用于输入聊天内容 ```python input_text = tk.Text(frame, height=5, width=50) input_text.pack(side=tk.LEFT, fill=tk.BOTH, padx=5, pady=5) ``` 5. 创建一个按钮,用于发送聊天内容 ```python send_button = tk.Button(frame, text="发送", command=send_message) send_button.pack(side=tk.RIGHT, padx=5, pady=5) ``` 6. 创建一个标签框架,用于显示聊天记录 ```python label_frame = tk.LabelFrame(root, text="聊天记录") label_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) ``` 7. 在标签框架中创建一个滚动条 ```python scrollbar = tk.Scrollbar(label_frame) scrollbar.pack(side=tk.RIGHT, fill=tk.Y) ``` 8. 在标签框架中创建一个文本框,用于显示聊天记录 ```python label_text = tk.Text(label_frame, height=20, width=50, yscrollcommand=scrollbar.set) label_text.pack(side=tk.LEFT, fill=tk.BOTH) ``` 9. 定义一个函数用于发送聊天内容 ```python def send_message(): message = input_text.get(1.0, tk.END).strip() if message: label_text.insert(tk.END, "你: " + message + "\n") input_text.delete(1.0, tk.END) label_text.see(tk.END) ``` 10. 运行主窗口 ```python root.mainloop() ``` 以上就是实现Python Tkinter聊天气泡对话框的基本步骤。如果需要美化界面或增加其他功能,可以根据实际需求进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值