码迷,mamicode.com
首页 > 移动开发 > 详细

Android 显示空页面工具类

时间:2016-05-07 08:24:07      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

做项目肯定会遇到这样的需求,数据加载为空或者数据加载异常时候显示一个空页面给用户:
技术分享

这篇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);
                }
            });
        }
    }

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

Android 显示空页面工具类

标签:

原文地址:http://blog.csdn.net/u014733374/article/details/51331629

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!