Android 显示空页面工具类

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

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

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

时间: 2024-10-07 18:27:22

Android 显示空页面工具类的相关文章

Android中常用的工具类01

1.图片和视频缩略图工具类 import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.media.ThumbnailUtils; /** * 缩略图生成工具类 * @author * */ public class ThumbnailGenerateUtils { private ThumbnailGenerateUtils(){}; /** * 根据指定的图像路径和大小来获取缩略图

Android开发调试日志工具类[支持保存到SD卡]

直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.net.UnknownHostException; import java.text.SimpleDateFormat; impor

Android开源项目大全 - 工具类

主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过依赖注入减少View.服务.资源简化初始化,事件绑定等重复繁琐工作 AndroidAnnotations(Code Diet)android快速开发框架 项目地址:https://github.com/excilys/androidannotations 文档介绍:https://github.com/excilys

Android调节屏幕亮度工具类BrightnessUtils

如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 项目需要做了一个调节屏幕的工具类 /* * Android调节屏幕亮度工具类 * by itas109 * http://blog.csdn.net/itas109 * * 注意:需要添加setting权限 * <uses-permission android:name="android.permission.WRITE_SETTINGS" /> */ publ

wemall app商城源码android开发MD5加密工具类

wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发MD5加密工具类主要代码,供技术员参考学习. package com.gzcivil.utils; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgori

Android中常用的工具类02

1.读取手机联系人信息 一般用在读取手机通讯录上传,这一块比较多. import java.util.ArrayList; import java.util.List; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.provider.ContactsContract.CommonDataKinds.Phon

Android|Java 开发常用工具类

如题 该文章展示的是我开发过程中使用的部分常用工具类方法,不定期更新. 欢迎各位大牛批评指教,如有发现错误,欢迎留言指教,如有更好的实现方式,也欢迎留言交流学习,谢谢. 一.手机号 座机号.邮箱格式匹配工具类 package com.kevin.test.utils; /** * 字符串格式匹配工具类 匹配手机号.座机号.邮箱等 * * @author blj * */ public class FormatCheckUtils { /** * 判断是否符合邮箱格式 */ public stat

Android弹出Toast工具类总结

Android弹出Toast工具类总结,包括系统自带的,也包括自定义的. public class ToastUtil { public ToastUtil() { } public static Toast showShortToast(Context context, String text) { Toast toast = Toast.makeText(context, text, 0); toast.show(); return toast; } public static Toast

Android三级缓存机制工具类的实现

一.三级缓存概述 (一)三级缓存的三级 第一级是内存,最快,不需要网络 第二级是本地,不需要网络 第三级是网络,需要网络请求 三级缓存机制的思想: 如果在内存中获取到数据,就不去本地和网络中获取. 如果在本地中获取到数据就不去网络中获取, 如果内存和本地中不存在数据,就要去网络中请求数据 三级缓存技术能有效节省用户的流量,但是也会增加一些内存负担. 二.使用示例展示三级缓存工具栏类的使用 程序运行后的页面: 虽然只用一个按钮和一个图片显示,但是通过测试(联网状态和断网状态对比)能知道图片是从网络