解决底部弹窗高度最高为半个屏幕高度,变动数据出现非半屏的bug
来源:互联网 发布:网络直播服务器搭建 编辑:程序博客网 时间:2024/06/05 08:40
前提:自定义从底部弹出的弹出,布局很简单,模仿IOS效果的底部弹窗,我是extend PopupWindow来处理的,关键布局就是LinearLayout包裹了Listview,最初的解决方案是在初始化布局的时候获得屏幕的高度和LinearLayout的高度
int windowHalfHeight = ((Activity) mContext).getWindowManager().getDefaultDisplay().getHeight() / 2; mLayoutList.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { float mLayerWidth = (float) mLayoutList.getHeight(); if (mLayerWidth != 0 && mLayerWidth >= windowHalfHeight) { ViewGroup.LayoutParams layoutParams = mLayoutList.getLayoutParams(); layoutParams.height = windowHalfHeight; mLayoutList.setLayoutParams(layoutParams); mLayoutList.getViewTreeObserver().removeGlobalOnLayoutListener(this); } } });
导致:这样其实只是解决了初始化时候的高度,如果第一次list的数据比较少,数据更新之后重新设置,数据变多,控件还是会被扩展,导致大于半个屏幕的高度。
解决:其实解决方案也很简单,在adapter设置数据的时候重新设置外布局LinearLayout的高度(注意 :xml布局中设置的高度为wrap_content)。
之前一直用OnGlobalLayoutListener监听布局的变化,但是重新设置数据之后监听的高度一直没变化,换思路之后就解决这个bug了。如有知道具体原因的望告知,谢谢。
mData.clear(); mData.addAll(data); myAdapter.notifyDataSetChanged(); /**数据超过半屏幕设置半个屏幕高度,低于半屏设置具体高度*/ int setHight = windowHalfHeight; View view = myAdapter.getView(0, null, mListView); if (null != view) { view.measure(0, 0); int allHight = view.getMeasuredHeight() * mData.size(); if (allHight < windowHalfHeight) { setHight = allHight; } ViewGroup.LayoutParams layoutParams = mLayoutList.getLayoutParams(); layoutParams.height = setHight; mLayoutList.setLayoutParams(layoutParams); }
阅读全文
0 0
- 解决底部弹窗高度最高为半个屏幕高度,变动数据出现非半屏的bug
- 设置div的高度为屏幕高度
- ListView嵌套WebView,滚动时有的WebView底部出现大量空白,高度不定如何解决
- 实现盒子高度撑开,而且以最高的为高
- pandas读取txt返回有记录数据的最高高度
- android 屏幕高度问题之底部导航栏所占的高度
- 得到屏幕的高度
- div的高度自适应屏幕的高度
- Android 获取 屏幕状态栏高度和标题栏高度 避免出现0的情况
- 实现一个方法,搭出最高的一堆箱子,箱堆的高度为每个箱子高度的总和
- 一句话解决RecyclerView 高度设置wrap_content 无作用的bug
- Android学习笔记(二十三):GridVeiw的高度设置为屏幕高度的一半
- 获取屏幕的宽高度
- SDAutolayout自动计算高度(解决bug)
- 获取屏幕真实高度包含NavigationBar(底部虚拟按键)
- editText 放置到屏幕底部高度可扩展[图片]
- 网页不满屏幕高度时,footer始终显示在底部
- 获取屏幕大小、获取底部虚拟按键高度
- R语言学习系列之向量化计算
- 准备PAT之Public Bike Management——DFS/DFS+Dijikstra
- 非科班出身的程序员,该如何弥补技术差距?
- Shader编程学习笔记(九)—— Cg语言入门1
- DELPHI中不同类型的动态数组变量共享内存
- 解决底部弹窗高度最高为半个屏幕高度,变动数据出现非半屏的bug
- Dlib学习笔记:解决dlib array2d转 OpenCV Mat时颜色失真
- ajax实现表单提交
- 定点数与浮点数
- Mysql 按时间段生成每天数据
- 关于Android热修复的几种解决方案
- 利用css3实现箭头
- 读入与输出
- Shader编程学习笔记(十)—— Cg语言入门2