美文网首页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如何设置列表的最大高度或最多可见个数,超出则以滚动

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

  • Unity UGUI组件自动对齐

    简述 滚动列表,列表中的cell宽度固定, 高度可变(也就是道具个数不一定,有可能一个,有可能10个,多个),超出...

  • App Inventor垂直滚动列表显示框

    App Inventor中的界面想要实现垂直滚动列表,有3个方法:屏幕滚动、垂直滚动布局、列表框高度超出内容。 如...

  • 关于下拉菜单

    设置下拉菜单默认显示文字,但不出现在下拉列表中 在标签中加上上面属性就行了 给下拉框设置超出高度使用滚动条表示

  • scroll系列 相关属性

    元素内容溢出 && 设置了元素的overflow属性,产生滚动条或超出内容被隐藏 实际上,不管是滚动条还是超出...

  • 移动端禁止弹出层背景滚动

    场景:背景内容超出屏幕高度,需滚动展示;底部弹窗内容超出底部容器高度,需在容器内滚动展示;当底部弹窗打开,需阻止背...

  • 隐藏滚动条

    条件:一个div,高度超出预设高度,会出现滚动条,不美观。 解决:在div外在套一个div,外层div设置over...

  • js页面按需加载

    思路:1.设置分页显示。2.页面滚动的高度和当前页面可见区域的高度总和,大于文档的高度时,加载下一页

  • Vue 设置内容滚动 并且隐藏滚动条

    设置子视图超出父试图之后滚动overflow-x: scroll;设置滚动flex-direction: row;...

  • div超出高度的时候出现滚动条

    一、div超出高度的时候出现滚动条 p超出高度的时候出现滚动条时怎么办?其实很简单:在p的style属性加上ove...

网友评论

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

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