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

最近在做开发的时候,遇到了这样的一个需求:有一个聊天的模板列表,要求使用弹框的样式展示,尽可能的做到高度自适应。于是我就开始了各种探索:
探索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的高度差距不大,否则列表看着就不那么美观了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,713评论 1 92
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,914评论 1 32
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,939评论 0 17
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,816评论 4 61
  • 我们今天分享范仲淹的《渔家傲·秋思》。 塞下秋来风景异,衡阳雁去无留意。四面边声连角起,千嶂里,长烟落日孤城闭。 ...
    LiLi1113阅读 5,872评论 0 2

友情链接更多精彩内容