BottomSheetDialogFragment仿制抖音评论框

没有效果图的示例简直就是扯淡

在这里插入图片描述

BottomSheetDialogFragment

BottomSheetDialogFragment 继承自 AppCompatDialogFragment,官方解释为模态底部表,是 DialogFragment 的一个版本,它使用的是 BottomSheetDialog,而不是浮动对话框。BottomSheetDialogFragment 相对于其它对话框有着以下的优势:

  1. 拥有自己的生命周期;
  2. 可对整个页面进行折叠、展开和销毁;
  3. 可灵活使用自定义样式。

直接上代码吧

CommentBottomSheetDialogFragment.java

/*** 评论框*/
public class CommentBottomSheetDialogFragment extends BottomSheetDialogFragment implements View.OnClickListener {//数据private List<CommentsInfo> commentsInfos = new ArrayList<>();//adapterprivate VideoShowCommentAdapter commentAdapter;//recyclerViewRecyclerView mLvComment;//总评论数TextView mTvDialogCommentCount;//行为组件BottomSheetBehaviorBottomSheetBehavior<ViewGroup> behavior;@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);//禁止dialog不被软键盘弹起来setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen);}@NonNull@Overridepublic Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {//因为BottomSheetDialog默认的样式背景带阴影的,如果需要定制的话,第一步如下//设置BottomSheetDialog整体样式为透明的setStyle(BottomSheetDialogFragment.STYLE_NORMAL, R.style.TransBottomSheetDialogStyle);//创建布局Dialog dialog = super.onCreateDialog(savedInstanceState);View view = LayoutInflater.from(getContext()).inflate(R.layout.video_show_comment_layout, null, false);mLvComment = view.findViewById(R.id.lv_video_show_comment);mTvDialogCommentCount = view.findViewById(R.id.tv_video_show_comment_dialog_comment);//点击事件view.findViewById(R.id.tv_close_comment_dialog).setOnClickListener(v -> dismiss());view.findViewById(R.id.txt_video_comment).setOnClickListener(this);//点击外部可以关闭dialog.setCanceledOnTouchOutside(true);dialog.setContentView(view);//BottomSheetDialog的背景是白色的。如果需要修改,setContentView之后,设置view布局的样式为透明,然后在布局中设置背景就好((View) view.getParent()).setBackgroundColor(getResources().getColor(android.R.color.transparent));//设置宽度为屏幕的一半ViewGroup parent = (ViewGroup) view.getParent();behavior = BottomSheetBehavior.from(parent);behavior.setPeekHeight(getScreenHeight(getActivity()) / 3 * 2);//向下滑动可隐藏behavior.setHideable(true);//这里设置宽度最高为屏幕的一半,如果不设置下面代码,上滑会直接充满全屏幕ViewGroup.LayoutParams layoutParams = parent.getLayoutParams();layoutParams.height = getScreenHeight(getActivity()) / 3 * 2;parent.setLayoutParams(layoutParams);//初始化数据initData();//返回界面return dialog;}/*** 加载逻辑处理*/private void initData() {//构建评论适配器commentAdapter = new VideoShowCommentAdapter(getContext());mLvComment.setLayoutManager(new LinearLayoutManager(getContext()));mLvComment.setAdapter(commentAdapter);//评论item的点击事件commentAdapter.setListener(position -> Toast.makeText(getActivity(), "点击了", Toast.LENGTH_SHORT).show());//如果数据不是空if (commentsInfos != null && commentsInfos.size() > 0) {mTvDialogCommentCount.setText(new StringBuilder().append(commentsInfos.size()).append(" ").append(getActivity().getString(R.string.string_comment)));} else {mTvDialogCommentCount.setText(new StringBuilder("0 ").append(getString(R.string.string_comment)));}//赋值给adaptercommentAdapter.setCommentsInfos(commentsInfos);}/*** 接收接口传递过来的数据* @param infos*/public void setDatas(List<CommentsInfo> infos) {commentsInfos = infos;//刷新if(null != commentAdapter){//数据给到适配器那边,刷新显示commentAdapter.setCommentsInfos(commentsInfos);commentAdapter.notifyDataSetChanged();}}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.txt_video_comment:OtherDialog.showVideoCommentDialog(getActivity(), text -> {//手动处理数据长度+1。达到静默加载效果setCount(true);//拿到评论的内容,返回给activity处理onGetContentListener.onGetContent(text);});break;}}/*** 设置具体有多少数据* @param isChange  如果为true,说明评论了,直接+1    如果为false时,说明新发的评论调用接口失败了(请调用此接口,传false),还是使用原数据源*/public void setCount(boolean isChange) {mTvDialogCommentCount.setText(isChange ?new StringBuilder().append(commentsInfos.size() + 1).append(" ").append(getActivity().getString(R.string.string_comment)):new StringBuilder().append(commentsInfos.size()).append(" ").append(getActivity().getString(R.string.string_comment)));}/*** 获取屏幕高度* @param activity* @return*/public int getScreenHeight(Context activity) {return getScreenSize(activity).y;}/*** 获取屏幕高度* @param activity* @return*/private Point getScreenSize(Context activity) {Display display = ((Activity)activity).getWindowManager().getDefaultDisplay();Point size = new Point();display.getSize(size);return size;}//点击事件public interface OnGetContentListener {void onGetContent(String content);}private OnGetContentListener onGetContentListener;public void setGetContentListener(OnGetContentListener onGetContentListener) {this.onGetContentListener = onGetContentListener;}}
注:这个是评论框的显示的界面

OtherDialog.java

public class OtherDialog {/*** 视频秀评论弹框* @param context 上下文*/public static void showVideoCommentDialog(Context context, OnGetContentListener listener){Dialog dialog = new Dialog(context, R.style.video_comment_style);//对话框的布局View view = LayoutInflater.from(context).inflate(R.layout.dialog_video_comment_layout, null);//评论输入框PPEditTextView mInputContent = view.findViewById(R.id.et_input_comment);//键盘销毁时,dialog关闭mInputContent.setOnBackKeyEventListener(() -> {new Handler().postDelayed(() -> dialog.dismiss(), 200);return true;});//发送事件view.findViewById(R.id.tv_send_comment).setOnClickListener(v -> {String commentContent = mInputContent.getText().toString().trim();if(TextUtils.isEmpty(commentContent)){Toast.makeText(context, "评论内容不能为空", Toast.LENGTH_SHORT).show();}else{if(listener != null){listener.onText(commentContent);}dialog.dismiss();//输入框置空mInputContent.setText("");}});//获取焦点mInputContent.setFocusable(true);mInputContent.setFocusableInTouchMode(true);mInputContent.requestFocus();//将布局设置给dialogdialog.setContentView(view);dialog.setCanceledOnTouchOutside(true);//获取当前Activity所在的窗体Window dialogWindow = dialog.getWindow();//设置窗体的属性WindowManager.LayoutParams lp = dialogWindow.getAttributes();lp.width = WindowManager.LayoutParams.MATCH_PARENT;//设置dialog从中间弹出dialogWindow.setGravity(Gravity.BOTTOM);//将属性给窗体dialogWindow.setAttributes(lp);//返回对话框dialog.show();}}
注:这个是发表评论的dialog框,里面用到了自定义的EditText。用来监听软键盘的显示隐藏

附上demo源码。

源码:源码请点这里

如果下不了源码,可以加微信,手机号在下面。


Q:486789970(QQ现在很少用)
V:18588400509(如果着急,可以直接加微信)
email:mr.cai_cai@foxmail.com

如果有什么问题,欢迎大家指导。并相互联系,希望能够通过文章互相学习。

											                               	---财财亲笔

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/64593.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp 抖音授权登录、发布、分享 Ba-Aweme

简介&#xff08;下载地址&#xff09; Ba-Aweme 是一个集成抖音的uniapp插件&#xff0c;支持抖音授权登录&#xff0c;发布图片、视频&#xff0c;分享到联系人群组&#xff0c;直接拍摄等。自带选择图片和选择视频方法。 注意&#xff1a; 使用前&#xff0c;先到抖音开放…

四,产品创建和开发板连接天猫精灵后台

一&#xff0c;WiFi设备接入天猫精灵 https://living.aliyun.com/建议使用Chrome浏览器 接入流程&#xff1a; 产品的product secret: 手机下载天猫精灵app&#xff0c;扫码配网。 测试设备&#xff1a; 设备三元组&#xff1a; “product_secret”: Vkj0eNbl…

【蓝牙Mesh笔记 ①】ESP32-C3 模组上实现天猫精灵蓝牙 BLE Mesh AliGenie 接入,无需WiFi 连接也可以实现天猫精灵语音控制。

本系列博客学习由非官方人员 半颗心脏 潜心所力所写&#xff0c;仅仅做个人技术交流分享&#xff0c;不做任何商业用途。如有不对之处&#xff0c;请留言&#xff0c;本人及时更改。 系列一&#xff1a;ESP32系列模组基础学习系列笔记 1、 爬坑学习新旅程&#xff0c;虚拟机搭…

我们需要为机器人行业做点事?

本文内容基于近段时间国内外几个比较火热的事件的有感&#xff0c;做一些联想&#xff0c;科技的未来在哪里&#xff1f; 1.chatgpt的出现&#xff0c;科技巨头们都开始向大模型概念进行业务延伸&#xff08;阿里、百度、讯飞、360、包括今天刚得到的消息&#xff0c;华为也准…

AIGC+机器人=具身智能?硅谷最酷的两个男人不谋而合预演“下个浪潮”

收集整理|小鱼新的AI题材层出不穷&#xff0c;这次轮到“机器人AI"融合而成的具身智能概念。 “硅谷钢铁侠"马斯克和热爱黑色皮衣的"显卡教父”黄仁勋均作出积极表态&#xff0c;可谓不谋而合。 当地时间5月16日&#xff0c;特斯拉2023年年度股东大会召开&…

微软的焦虑?想多了!从.NET6 Preview2到大厂招聘,起飞

看了篇文章叫《从.NET看微软的焦虑》&#xff0c;这里忍不住先吐槽一下&#xff0c;看完不仅毫无收获&#xff0c;而且有一种先起个夺眼球的标题&#xff0c;然后再东拼西凑找证据。讲真的&#xff0c;微软市值基本上等于“阿里腾讯百度”三者之和&#xff0c;居然还焦虑的无法…

帆软BI产品FineBI下一个强硬对手——Metabase

在商业BI产品中&#xff0c;国内的FineBI&#xff08;帆软的FineReport报表工具之外的另一款BI产品&#xff09;处于领先地位&#xff0c;这些年大大小小的开源BI系统出了不少&#xff0c;但对Tableau、FineBI这类商业软件的影响其实并不是很大&#xff0c;主要原因是这些开源软…

打造一个window桌面应用:在线聊天对话机器人

大家好&#xff0c;我是辰哥~~~ 本文目标&#xff1a;打造一个window桌面应用&#xff1a;在线聊天对话机器人。 今天辰哥教大家做一个在线聊天对话机器人桌面应用&#xff0c;已经打包成exe可执行文件&#xff0c;读者可以直接拿来使用&#xff0c; 先上演示图 聊天客户端桌…

小Pang聊嵌入式界面开发

怎么说呢&#xff0c;昨天与嵌入式界面开发高手小Pang,聊了一下嵌入式界面开发方面的东西&#xff0c;小Pang也是很多经验的开发人员了&#xff0c;对这方面&#xff0c;是他的拿手好戏&#xff0c;官方的说&#xff0c;他是这方面的权威&#xff0c;个人来说&#xff0c;他是这…

跟随CSDN走进微软

文章目录 前言一、微软亚洲研究院(MSRA)&#xff1f;二、走进MSRA1.微软的技术发展及愿景2.工作环境 总结 前言 作为CSDN新刊物《新程序员》的读者&#xff0c;我很荣幸参加了CSDN走进微软的活动&#xff0c;见识到了名企的风范&#xff0c;也见到了许多研究院的前沿科技&…

拓扑梅尔智慧办公平台(Topomel Box) 3.0发布

今天&#xff0c;2022年12月21日&#xff0c;我很高兴地宣布&#xff1a;拓扑梅尔智慧办公平台(Topomel Box)的3.0版本正式发布。 下面&#xff0c;请允许我简单地介绍下新版本的一些基本情况。 新特性 1) 统一的文件管理 将所有你关心的文件都统一存放在同一个地方&#xff…

Android:“金九银十”战役打响还没看到跟BAT大佬的差距就危险了!来看看如何在大厂面试一击而中

前言 金九银十已来临&#xff0c;打响九月第一战&#xff01;开启中长线布局策略。 想必现在有许多朋友&#xff0c;都在为即将到来的金三银四做准备&#xff0c;不知道各位朋友是否十足的把握能拿到自己心仪的Offer呢&#xff1f; 下面无偿分享一些我多年面试和工作经验给你…

面试BAT、Facebook、微软、网易等大厂经验分享(获得8个offer)

背景 最近陆陆续续已经开始校招&#xff08;秋招&#xff09;了&#xff0c;现在分享下石头当年参加校招的一些经历。本文最早是发布在 blog 上的&#xff0c;现在通过公众号分享给大家&#xff0c;当然会在原有的基础上做了调整。 幸亏当年有记录&#xff0c;不然现在回想肯…

Teams Tab App 的 manifest 分析

上一篇文章我们深入来分析了 tab app 的代码&#xff0c;这篇文章我们研究一下 manifest。 Teams 的 manifest 实际上是一个很复杂的 json&#xff0c;里面的配置非常多&#xff0c;之前的文章陆陆续续的讲过一些配置&#xff0c;我们在这篇文章里来看看关于 tabs 的一些配置&…

2020最新BAT Android高端技术面试145题详解

前言 本篇是结合我之前面试别人的经验&#xff0c;以及跟一些在BAT上班的朋友&#xff0c;讨论总结出的一份很全面的大公司需要用到的一些高端Android技术。这里也专门整理了一个文档&#xff0c;重点和难点都有详细解析。这些题目有点技术含量&#xff0c;需要好点时间去研究…

百度文心一言推出内测专用独立 App;暴雪回应被网易起诉:未收到相关诉状;iOS 17或支持第三方应用商店 | 极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#x…

真的来了!百度文心一言APP在哪里下载?跟网页版有什么区别?

此前百度公开宣布文心一言没有APP&#xff0c;所有文心一言APP都是假的。并针对文心一言盗版APP进行举证上诉&#xff0c;还对苹果应用商店起诉。时隔半个多月&#xff0c;今天上午&#xff0c;小宝在文心一言官方网站上看到内测专用APP下载链接&#xff0c;真正的文心一言APP终…

谷歌新大模型明夜就发/ 菜鸟冲刺IPO/ 苹果新增Siri录屏...今日更多新鲜事在此...

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大家好&#xff0c;今天是5月9日星期二&#xff0c;有很多新产品即将发布的消息呢~ 话不多说&#xff0c;赶快和日报君一起来看看吧。 iOS 16.5下周发布&#xff0c;可用Siri录屏 你的Siri&#xff0c;很快就可以用来录屏了。 快科技…

话费直充/三网直冲/联通直充/电信直充/移动直充/系统源码

介绍&#xff1a; 系统特性: ①、移动&#xff0c;联通&#xff0c;电信话费使用wxH5/宝H5&#xff08;可根据客户定制&#xff09; ②、移动话费/联通话费/电信话费额度支持1-任意额度&#xff08;不得超过官网所支持的额度&#xff09; ③、系统实测每分钟订单量订单1500单左…

在中国大陆,XGP对比Steam有什么优势?

6个月前&#xff0c;我入手了《Persona 5 Royal 女神异闻录5皇家版》&#xff08;简称P5R&#xff09;的PS4光盘&#xff0c;玩了一小段就搁置了&#xff0c;2022年10月21日&#xff0c;P5R登录了全平台&#xff0c;而PS4光盘又无法升级到PS5版&#xff0c;为了低价享受更好的画…