美文网首页Android开发类库精选Android开发经验谈Android开发
打造一个无数据显示无数据提示信息的ListView

打造一个无数据显示无数据提示信息的ListView

作者: xiaolei123 | 来源:发表于2017-11-17 15:47 被阅读68次

    最近我们测试人员说,我们的所有的列表都要做一个没有数据就提示没有数据,当时我的表情是这样的 =_=!!! 我的天呐……这么多列表真的要一个一个做嘛!!!然后我想了一下,那就直接改造Listview吧……说干就干。


    没有数据的效果:

    没有数据的时候

    有数据的效果:

    有数据的时候

    代码:
    NoDataListView.java

    package com.tianjs.tianjinsuop2p.widgets;
    
    import android.content.Context;
    import android.content.res.TypedArray;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.util.AttributeSet;
    import android.widget.Adapter;
    import android.widget.ListView;
    
    import com.tianjs.tianjinsuop2p.R;
    
    /**
     * Created by xiaolei on 2017/4/28.
     */
    
    public class NoDataListView extends ListView
    {
        private int height = 0;
        private int width = 0;
        private Bitmap noDataBitmap = null;
        private Paint mPaint;
    
        private int minItem = 0;
        private int noDataImgInt = 0;
    
        public NoDataListView(Context context)
        {
            this(context, null);
        }
    
        public NoDataListView(Context context, AttributeSet attrs)
        {
            this(context, attrs, 0);
        }
    
        public NoDataListView(Context context, AttributeSet attrs, int defStyleAttr)
        {
            super(context, attrs, defStyleAttr);
            TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.NoDataListView);
    
            noDataImgInt = array.getResourceId(R.styleable.NoDataListView_noDataImg, 0);
            minItem = array.getInt(R.styleable.NoDataListView_minItem, 0);
    
            if (noDataImgInt != 0)
            {
                noDataBitmap = BitmapFactory.decodeResource(getResources(), noDataImgInt);
            } else
            {
                noDataBitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
            }
            mPaint = new Paint();
    
            array.recycle();
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
        {
            height = MeasureSpec.getSize(heightMeasureSpec);
            width = MeasureSpec.getSize(widthMeasureSpec);
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    
        @Override
        protected void onDraw(Canvas canvas)
        {
            Adapter adapter = getAdapter();
            super.onDraw(canvas);
            if (adapter == null || adapter.getCount() <= minItem)
            {
                canvas.drawBitmap(noDataBitmap, width / 2 - noDataBitmap.getWidth() / 2, height / 2 - noDataBitmap.getHeight() / 2, mPaint);
            }
        }
    }
    
    

    属性声明:

    <declare-styleable name="NoDataListView">
        <!--最低Item数-->
        <attr name="minItem" format="integer"/>
        <!--没有数据时,显示的图片资源-->
        <attr name="noDataImg" format="reference"/>
    </declare-styleable>
    

    如何使用?

    <com.tianjs.tianjinsuop2p.widgets.NoDataListView
                android:id="@+id/listview"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:divider="#00000000"
                android:dividerHeight="0dp"
                android:overScrollMode="never"
                android:scrollbars="none"
                app:minItem="0"
                app:noDataImg="@drawable/icon_wushuju"/>
    

    其实就是在onDraw里面,检测到有几个item,如果adapter为null,或者adapter的count小于等于最小item数的话,就在背景显示没有数据的图片出来、

    相关文章

      网友评论

        本文标题:打造一个无数据显示无数据提示信息的ListView

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