android listview高度设置,Android如何设置列表的最大高度或最多可见个数,超出则以滚动显示...

本文介绍了在Android开发中如何解决聊天模板列表高度自适应的需求。通过创建一个名为FixItemListView的自定义ListView,实现了根据最大显示个数动态设置列表高度的功能。详细介绍了自定义ListView的代码实现和使用方法,以及潜在的美观问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做开发的时候,遇到了这样的一个需求:有一个聊天的模板列表,要求使用弹框的样式展示,尽可能的做到高度自适应。于是我就开始了各种探索:

探索1>动态的的设置弹框的高度,发现无法准确的计算高度,不美观;

探索2>将列表设置成固定高度,发现如果数目少的话就留有空白,不美观;

探索3>动态的设置列表的高度,这个办法还是可以的,使用recycleView做列表,发现高度很难控制,最终放弃了。

探索4>动态的设置列表的高度,只是使用listView实现,最终发现是符合需求的。

好了,闲话不说了,该是上硬菜的时候了。

public class FixItemListView extends ListView {

private int mMaxItemCount;

public FixItemListView(Context context) {

super(context);

}

public FixItemListView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public FixItemListView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

@Override

public void setAdapter(ListAdapter adapter) {

super.setAdapter(adapter);

resetListViewHeight();

}

public void setFixItemCount(int count){

this.mMaxItemCount = count;

resetListViewHeight();

}

private void resetListViewHeight(){

ListAdapter listAdapter = getAdapter();

if(listAdapter == null || mMaxItemCount == 0 || listAdapter.getCount() == 0){

return;

}

View itemView = listAdapter.getView(0, null, this);

itemView.measure(0,0);

int itemHeight = itemView.getMeasuredHeight();

int itemCount = listAdapter.getCount();

LinearLayout.LayoutParams layoutParams = null;

if(itemCount <= mMaxItemCount) {

layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT ,ViewGroup.LayoutParams.WRAP_CONTENT);

}else{

layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT ,itemHeight*mMaxItemCount);

}

setLayoutParams(layoutParams);

}

}

使用方式

FixItemListView listView;

listView.setFixItemCount(3);//最大设置3个可见

总结

大致思路就是将具体的计算逻辑封装自定义的列表内,这样使用起来的就相当方便,其实就是计算出第一条item的高度,然后乘以最大item的个数就是最终列表展示的高度。当然这也有一个弊端,因为这个思路的前提是假设列表的每个item的高度差距不大,否则列表看着就不那么美观了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值