Android 显示空页面工具类

来源:互联网 发布:php date 取小时分钟 编辑:程序博客网 时间:2024/06/05 11:08

做项目肯定会遇到这样的需求,数据加载为空或者数据加载异常时候显示一个空页面给用户:
这里写图片描述

这篇blog就来实现这样一个简单的封装

1.首先定义一个线性布局
2.然后通过一个工具类来管理这样一个View

先来看自定义的线性布局

public class EmptyLayout extends LinearLayout{    /**     * 空页面图片     */    private ImageView emptyImg;    /**     * 空页面文本     */    private TextView emptyTv;    /**     * 空文字     */    private String emptyText;    /**     * 空文字颜色     */    private int emptyTextColor;    /**     * 空文字大小     */    private float emptyTextSize;    /**     * 空图片     */    private Drawable emptyDrawable;    /**     * 图片宽度     */    private int imgWidth;    /**     * 图片高度     */    private int imgHeight;    public EmptyLayout(Context context) {        this(context ,null);    }    public EmptyLayout(Context context, AttributeSet attrs) {        this(context, attrs ,0);    }    public EmptyLayout(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        //初始化布局        initView();        //初始化参数        initDatas();    }    /**     * 初始化布局     */    private void initView(){        View view= LayoutInflater.from(getContext()).inflate(R.layout.empty_layout,this);//注意inflate方法的parent传入LinearLayout        emptyImg= (ImageView) view.findViewById(R.id.common_iv);        emptyTv= (TextView) view.findViewById(R.id.common_tv);    }    /**     * 设置文本     */    public void setEmptyText(String emptyText) {        this.emptyText=emptyText;        if(emptyText!=null)            emptyTv.setText(emptyText);    }    /**     * 设置文本颜色     */    public void setEmptyTextColor(int emptyTextColor) {        this.emptyTextColor=emptyTextColor;        emptyTv.setTextColor(emptyTextColor);    }    /**     * 设置空文本字体大小     *     * @param emptyTextSize 单位是sp     */    public void setEmptyTextSize(float emptyTextSize) {        this.emptyTextSize=emptyTextSize;        emptyTv.setTextSize(TypedValue.COMPLEX_UNIT_PX,emptyTextSize);    }    /**     * 设置图片     */    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)    public void setEmptyDrawable(Drawable drawable) {        this.emptyDrawable=drawable;        emptyImg.setBackground(drawable);    }    /**     * 设置图片的宽度和高度     */    public void setImgWH(int imgWidth ,int imgHeight) {        this.imgHeight=imgHeight;        this.imgWidth=imgWidth;        ViewGroup.LayoutParams lp=emptyImg.getLayoutParams();        lp.width=imgWidth;        lp.height=imgHeight;        emptyImg.setLayoutParams(lp);    }    /**     * 初始化参数     */    public void initDatas(){        setEmptyText(emptyText);        setEmptyTextColor(emptyTextColor);        setEmptyTextSize(emptyTextSize);        setEmptyDrawable(emptyDrawable);        setImgWH(imgWidth,imgHeight);    }}

代码很简单,简单的我都不知道说什么了,注释也比较清晰。

然后通过一个工具类来对这个布局进行初始化:

public class ViewUtil {    public static EmptyLayout getEmptyLayout(Context context ,String text){        EmptyLayout layout=new EmptyLayout(context);        layout.setEmptyText(text);        layout.setEmptyTextSize(CommonUtils.dip2px(context,15));        layout.setEmptyTextColor(context.getResources().getColor(R.color.colorAccent));        layout.setEmptyDrawable(context.getResources().getDrawable(R.mipmap.nodata));        layout.setImgWH(CommonUtils.dip2px(context, 69), CommonUtils.dip2px(context, 47));        //这里控制了        AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, CommonUtils.dip2px(context, 300));        layout.setLayoutParams(params);        return layout;    }}

也没有什么难度,用到一个dp转px的方法,很常见:

 /**     * dp转px     */    public static int dip2px(Context context ,float dpValue){        float density=context.getResources().getDisplayMetrics().density;        return (int)(dpValue*density+0.5);    }

最后看如何使用:

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(ViewUtil.getEmptyLayout(this,"暂无数据"));    }}

只需要在想用到该view的地方调用

ViewUtil.getEmptyLayout(this,"暂无数据")

同理的其实也可以类似实现无网络状况的页面,页面加载失败的页面等。而不需要我们在对应页面的布局中去写布局文件。

ps:最后在放一个对登陆与否方法的封装

/**     * 提示登录     * @param context     * @param clazz     */    public  static void isEnterLoginAct( final Context context,Class clazz) {        //获取登陆用户保存数据        boolean isLogin=TextUtils.isEmpty(GlobalParams.Token)        if (isLogin) {            Intent intent = new Intent(context, clazz);            context.startActivity(intent);        } else {            ShowDialogUtils.showInfoDialog(context, "您还没有登录,是否去登录?", new View.OnClickListener() {                @Override                public void onClick(View v) {                    Intent intent = new Intent(context, LoginAct.class);                    context.startActivity(intent);                }            });        }    }

一直以来对封装都不是很在行,不积硅步无以至千里,先从最简单的做起。

0 0
原创粉丝点击