美文网首页android开发日常总结
Android如何设置列表的最大高度或最多可见个数,超出则以滚动

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

作者: aitality | 来源:发表于2019-03-01 18:17 被阅读2次

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

    相关文章

      网友评论

        本文标题:Android如何设置列表的最大高度或最多可见个数,超出则以滚动

        本文链接:https://www.haomeiwen.com/subject/arljuqtx.html