当前位置: 首页 > news >正文

BottomSheetDialog高度自适应,布局RecyclerView使用问题

public class CultureBottomDialogView {/*** 标题*/private static TextView textTitle;/*** 关闭按钮*/private static TextView textClose;/*** 列表*/private static RecyclerView recyclerView;private static BottomDialogAdapter dialogAdapter;private static List<String> mData = new ArrayList<>();public static BottomSheetDialog showReportDialog(Context context) {/*** Dialog自带白色背景问题,设置style*/int maxHeight = (int) (ScreenUtils.getScreenHeight()*0.7);BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(context,R.style.CustomDialog);/*** 高度比较高的自定义bottomsheetdialog弹框在展示时可能会因为大于16:9 比例的关键线而收缩一些高度如何让弹窗全部展示并且收缩的时候全部收缩* 调整peekHeight以避免不必要的收缩:*/bottomSheetDialog.getBehavior().setPeekHeight(maxHeight);View commentView = LayoutInflater.from(context).inflate(R.layout.culture_bottom_dialog_view_layout, null);ConstraintLayout layout = commentView.findViewById(R.id.culture_bottom_dialog_view_parent_layout);layout.setMaxHeight(maxHeight);textTitle = commentView.findViewById(R.id.culture_bottom_dialog_view_title);textClose = commentView.findViewById(R.id.culture_bottom_dialog_view_close);recyclerView = commentView.findViewById(R.id.culture_bottom_dialog_view_recyclerview);recyclerView.setLayoutManager(new LinearLayoutManager(context));dialogAdapter = new BottomDialogAdapter();recyclerView.setAdapter(dialogAdapter);/*** 动态设置RecyclerView的高度不设置外部布局的高度*/dialogAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {@Overridepublic void onChanged() {super.onChanged();//字体大小15sp,上下18padding ,底部边线0.5int itemHeight = SizeUtils.sp2px(15)+SizeUtils.dp2px(36.5f);int recyclerHeight = dialogAdapter.getItemCount() * itemHeight;ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);layoutParams.topToBottom = R.id.culture_bottom_dialog_view_title;if(recyclerHeight>maxHeight){layoutParams.height = maxHeight;}else {layoutParams.height = recyclerHeight;}recyclerView.setLayoutParams(layoutParams);}});dialogAdapter.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {bottomSheetDialog.dismiss();}});textClose.setOnClickListener(new NoDoubleClickListener() {@Overrideprotected void onNoDoubleClick(View v) {bottomSheetDialog.dismiss();}});bottomSheetDialog.setContentView(commentView);/*** 点击外部能否关闭*/bottomSheetDialog.setCancelable(false);bottomSheetDialog.setCanceledOnTouchOutside(false);return bottomSheetDialog;}public static void setRecyclerData(){if(dialogAdapter!=null){for (int i = 0; i < 5; i++) {mData.add("济南");}dialogAdapter.setNewInstance(mData);}}public static void setRecyclerData2(){if(dialogAdapter!=null){for (int i = 0; i < 5; i++) {mData.add("电影");}dialogAdapter.setNewInstance(mData);}}private static class BottomDialogAdapter extends BaseWidgetChildAdapter<String, BaseViewHolder> {public BottomDialogAdapter() {super(R.layout.culture_bottom_dialog_view_recycler_item_layout);}@Overrideprotected void convert(@NonNull BaseViewHolder holder, String s) {TextView textTitle = holder.getView(R.id.culture_bottom_dialog_view_recycler_item_title);textTitle.setText(s);}}}

使用过程中一直有个问题困扰着,设置了高度后往上滑动的时候总有一块伸展的布局

一开始总以为是RecyclerView的问题,后来滑动外层也会伸展确认是外层问题

BottomSheetDialog因为比例问题会有一部分伸展

bottomSheetDialog.getBehavior().setPeekHeight(maxHeight);

直接设置伸展高度是RecyclerView的最大高度

再一个问题就是RecyclerView的条目变化的时候

ConstraintLayout的限制不生效了也就是
layout_constraintTop_toBottomOf不生效了

因为是动态设置RecyclerView的高度,忘了动态添加

layoutParams.topToBottom = R.id.culture_bottom_dialog_view_title;

记住添加

相关文章:

  • Mac下删除系统自带输入法ABC,正解!
  • Mysql中表的常用约束
  • 从零开始:如何用Electron将chatgpt-plus.top 打包成EXE文件
  • RabbitMQ启动报错:Error during startup: {error, {schema_integrity_check_failed,
  • 我是大学生,应该选系统运维方向,还是web开发方向?
  • 31|HTTP3:甩掉TCP、TLS 的包袱,构建高效网络
  • flask 之JWT认证实现
  • 系统安全及其应用
  • 一种用于异质结高电子迁移率晶体管(HEMTs)的紧凑型漏电流模型,其中包括双子带的二维电子气(2DEG)密度解
  • Zookeeper复习
  • 力扣2106.摘水果
  • Python正则表达式:深度解析URL匹配与操作
  • 【康耐视国产案例】智能AI相机联合OSARO为Zenni眼镜实现订单履约自动化
  • 深度神经网络——什么是扩散模型?
  • 用c#开发在linux环境下运行的程序
  • 【刷算法】从上往下打印二叉树
  • Bootstrap JS插件Alert源码分析
  • ES学习笔记(12)--Symbol
  • Fundebug计费标准解释:事件数是如何定义的?
  • JS 面试题总结
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • PHP 的 SAPI 是个什么东西
  • PHP的类修饰符与访问修饰符
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Vue官网教程学习过程中值得记录的一些事情
  • 大主子表关联的性能优化方法
  • 如何使用 JavaScript 解析 URL
  • 入门级的git使用指北
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 温故知新之javascript面向对象
  • 译米田引理
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • (C语言)fread与fwrite详解
  • (C语言)逆序输出字符串
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (接口自动化)Python3操作MySQL数据库
  • (论文阅读30/100)Convolutional Pose Machines
  • (三)终结任务
  • (生成器)yield与(迭代器)generator
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (四)React组件、useState、组件样式
  • (转)memcache、redis缓存
  • ***原理与防范
  • .gitignore文件设置了忽略但不生效
  • .htaccess 强制https 单独排除某个目录
  • .NET C# 使用GDAL读取FileGDB要素类
  • .Net 代码性能 - (1)
  • .sys文件乱码_python vscode输出乱码
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • ;号自动换行
  • []Telit UC864E 拨号上网
  • [C puzzle book] types