我的代码库(持续更新...)

转载请注明出处:http://blog.youkuaiyun.com/coderyue/article/details/51729357 来自Coderyue的博客

开篇声明

开发 Android 有一段时间了, 在实际开发过程中写了很多冗余的代码, 于是蹦出了一个想法, 封装一个自己的代码库, 一处更改,多处运行, 发现已经有好多人这么做了!我也迫不及待的开始了。部分代码是我搜集整理! (以下并没有附上全部效果图, 可以到文章后面的源代码下载地址下载代码或者安装apk查看)

BaseActivity 和 BaseFragment

写一个强大的Base类我只能说很关键, 就是拼爹啊! 父亲把很多活都干了儿子们就很方便了。 我的BaseActivity主要代码:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        onBefore();
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        initialize();
        initView();
        initData();
        onAfter();
        if (addTask)
            ActivityManager.getInstance().addActivity(this);
    }

    /**
     * onCreate 执行之前的操作
     */
    protected void onBefore() {
        this.context = this;
        this.activity = this;
    }

    /**
     * 用于初始化对象,获取Intent数据等操作
     */
    protected abstract void initialize();

    /**
     * 用于初始化视图,获取控件实例
     */
    protected abstract void initView();

    /**
     * 用于初始化数据,填充视图
     */
    protected void initData() {
    }

    /**
     * 用于执行数据填充完后的操作
     */
    protected void onAfter() {
    }

    @Override
    protected void onResume() {
        super.onResume();
        //可初始化友盟统计
//        MobclickAgent.onResume(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
//        MobclickAgent.onPause(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (addTask)
            ActivityManager.getInstance().delActivity(this);
    }

    /**
     * 增加默认的界面切换动画
     */
    @Override
    public void startActivity(Intent intent) {
        startActivity(intent, true);
    }

    public void startActivity(Intent intent, boolean anim) {
        super.startActivity(intent);
        if (anim) overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);
    }

    @Override
    public void startActivityForResult(Intent intent, int requestCode) {
        startActivityForResult(intent, requestCode, true);
    }

    public void startActivityForResult(Intent intent, int requestCode, boolean anim) {
        super.startActivityForResult(intent, requestCode);
        if (anim) overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);
    }

    @Override
    public void finish() {
        finish(true);
    }

    public void finish(boolean anim) {
        super.finish();
        if (anim) overridePendingTransition(R.anim.in_from_left, R.anim.out_to_right);
    }

    protected void getTitleBar() {
        titleBack = (ImageButton) findViewById(R.id.title_back);
        titleText = (TextView) findViewById(R.id.title_text);
        titleAction = (ImageButton) findViewById(R.id.title_action);
    }

onBefore: onCreate 执行之前的操作
initialize(): 可用于初始化上一个页面传递进来的数据, 初始化xml
initView(): 初始化视图
initData():初始化数据, 填充视图
onAfter():数据填充之后的操作

重写onResume和onPause可以做一些友盟统计,这样每个子类里面就不用都写一遍了。

上面的startActivity,finish和startActivityForResult的重载可用于页面之间的切换动画

我们经常用到titleBar, 可以在父类里面初始化好

下面看子类

public class MainActivity extends BaseActivity implements View.OnClickListener {

    @Override
    protected void initialize() {
        //初始化布局
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void initView() {
        getTitleBar();
        //直接使用 并且设置显示隐藏和点击事件
        titleBack.setOnClickListener(this);
        //设置title
        titleText.setText("title");
        titleAction.setVisibility(View.GONE);
    }

    @Override
    protected void initData() {
        super.initData();
    }

    @Override
    public void onClick(View v) {

    }
}

我的BaseFragment
结构上和BaseActivity差不多, 这里直接贴上子类代码,如果有兴趣可以下载我的源码查看

public class MyFragment extends BaseFragment {

    @Override
    protected void initialize() {
        //初始化布局
        initLayout(R.layout.fragment_my);
    }

    @Override
    protected void initView() {
        //这里只需findView
        TextView textView = (TextView) findView(R.id.text);
    }
}

自定义Dialog

ActionSheetDialog:一个仿IOS的ActionSheetDialog
You can do this:

new ActionSheetDialog(activity)
                        .builder()
                        .setCancelable(false)
                        .setCanceledOnTouchOutside(false)
                        .addSheetItem("第一个栏目", ActionSheetDialog.SheetItemColor.Blue,
                                new ActionSheetDialog.OnSheetItemClickListener() {
                                    @Override
                                    public void onClick(int which) {

                                    }
                                })
                        .addSheetItem("第二个栏目", ActionSheetDialog.SheetItemColor.Blue,
                                new ActionSheetDialog.OnSheetItemClickListener() {
                                    @Override
                                    public void onClick(int which) {

                                    }
                                }).show();

效果图:


这里写图片描述

LoadingDialog
效果图: 可以设置旋转图片,翻转方式等等


这里写图片描述

常用的确认dialog
你可以这样写:

new PromptDialog.Builder(context)
                        .setTitle(com.code.library.R.string.framework_tishi)
                        .setViewStyle(PromptDialog.VIEW_STYLE_NORMAL)
                        .setTitleSize(20)
                        .setTitleBarGravity(Gravity.CENTER)
                        .setMessage(com.code.library.R.string.framework_dangqianwukeyongwangluo)
                        .setMessageGravity(Gravity.CENTER)
                        .setButton2(com.code.library.R.string.framework_shezhi,
                                new PromptDialog.OnClickListener() {

                                    @Override
                                    public void onClick(Dialog dialog, int which) {

                                    }
                                })
                        .setButton1(com.code.library.R.string.framework_xuxiao,
                                new PromptDialog.OnClickListener() {

                                    @Override
                                    public void onClick(Dialog dialog, int which) {

                                    }
                                }).show();

效果图:


这里写图片描述

封装好之后只需几行代码就可以调用啦!

网络请求

封装Okhttp框架做网络请求, 采用Builder模式
这里一些代码和思路来自 鸿洋 的博客

get请求

OkHttpUtils
    .get()
    .url(url)
    .tag("tag")
    .addParams("key", "value")
    .build()
    .execute(new JsonCallBack<T>());

这里通过泛型自动解析实体类, 你也可以自己写CallBack, 可以返回String, 返回bitmap等等, 这里的tag最好设置上, 并且在当前Activity的ondestroy方法里取消当前tag的请求, 因为网络请求可能还没执行完但是Activity已经关闭了

Post请求

 OkHttpUtils
    .post()
    .url(url)
    .addParams("key", "value")
    .addParams("key", "value")
    .build()
    .execute(callback);

下载文件到指定目录

DownloadHelper.getInstance().download("url", "savepath", new DownloadHelper.OnDownloadListener() {
            @Override
            public void onSuccess(String path) {
                //返回成功
            }

            @Override
            public void onError(String message) {

            }

            @Override
            public void onProgress(float progress) {
                //返回的进度
            }
        });

Toast工厂 避免重复创建Toast

ToastFactory.showToast(context, "showToast");

一些常用的工具类

ActivityManager

已经在上面的BaseActivity里面集成
将所有Activity存储起来, 使用:比如回到首页时清除非首页的所有Activity

AppUtil
判断应用是否已安装:
AppUtil.isInstalled(context, "packageName");

通过包名打开应用:

AppUtil.openCLD( "packageName", context);

打开APk文件:

AppUtil.getApkFileIntent("packageName");

StatusBarHeightUtil 获取状态栏高度

StatusBarHeightUtil.getStatusBarHeight(context);

CommandAppUtil 应用打开方式
1 跳转应用市场

CommandAppUtil.command(context, "packageName");

2 打开url跳转浏览器

CommandAppUtil.openUrl(context, "url");

3 系统方式分享图片

CommandAppUtil.sharePhotoMore(activity, "img_path");

4 todo 直接下载url

NetworkUtil 检查网络
网络是否可用:

NetworkUtil.isAvailable(context)

Wifi是否可用:

NetworkUtil.isWIFIActivate(context);

打开网络设置页面:

startNetSettingActivity

SystemUtils 常用系统工具
dp2px:

SystemUtils.dp2px(context, 1);

px2dp:

SystemUtils.px2dp(context, 1);

显示和隐藏输入法:

SystemUtils.showInputmethod(view);
SystemUtils.hideInputmethod(view);

当前系统是否是中文:

SystemUtils.isZh()

封装SharedPreferences

读写数据:

SharedConfig.getInstance(context).writeData("key", "value");
SharedConfig.getInstance(context).readString()
SharedConfig.getInstance(context).readBoolean()
SharedConfig.getInstance(context).readInt()

Md5转换: MD5Utils

将字符串转MD5:

MD5Utils.Md5("string")

将字节数组转为MD5字符串:

MD5Utils.Md5("bytes")

获取设备信息: DeviceInfoUtils
得到手机IMEI:

DeviceInfoUtils.getImei(context)

获取屏幕宽高:

DeviceInfoUtils.getScreenHeight()
DeviceInfoUtils.getScreenWidth()

获取屏幕密度:

DeviceInfoUtils.getScreenDensity()

获得设备型号:

DeviceInfoUtils.getDeviceModel()

获得设备制造商:

DeviceInfoUtils.getManufacturer()

是否ROOT:

DeviceInfoUtils.isRoot()

输出可用内存:

DeviceInfoUtils.getAvailMemory()

输出总内存:

DeviceInfoUtils.getTotalMemory()

文件读取 :FileUtil

FileUtil.getFileUtil().readTxtFile()//读取文件返回字符串 使用StringBuider

FileUtil.getFileUtil().deleteDirectory(path)//删除目录(文件夹)以及目录下的文件

FileUtil.getFileUtil().deleteFile(filename)//删除单个文件

FileUtil.getFileUtil().getSuffixFile(List<String> files, String filePath, String suffere)//读取sd卡上指定后缀的所有文件

获取本地资源工具类 ArrayResource

如果你想获得在drawable下面多个有规律的图片, 你肯定不能每个都去R.drawable. 此时你可以这样组装起来:

 public static int[] getBgResourceInts(Context context) {
        if (bgResourceInts == null) {
            bgResourceInts = new int[17];
            for (int i = 0; i < bgResourceInts.length; i++) {
            //假如你有很多图片叫做bg0, bg1, bg2...
                int drawable = context.getResources().getIdentifier("bg" + i,
                        "drawable", context.getPackageName());
                bgResourceInts[i] = drawable;
            }
        }
        return bgResourceInts;
    }

图片处理类BitmapUtils

//保存图片并且通知系统及时更新
BitmapUtils.saveJPGE_After(Context context, Bitmap bitmap, String path, int quality)

//旋转图片一定角度
BitmapUtils.rotaingImageView(int angle, Bitmap bitmap)

//翻转bitmap
BitmapUtils.flip(Bitmap bitmap)

//将view转换成bitmap
BitmapUtils.getViewBitmap(View view)
BitmapUtils.convertViewToBitmap(View view)

//返回一张黑白图片 饱和度为0
BitmapUtils.returnSaturationBitmap(Bitmap bitmap)

//返回圆形bitmap
BitmapUtils.getRoundedCornerBitmap(Bitmap bitmap)

//我们转换成bitmap的时候往往出现内存溢出的现象, 此时可以这样做, 给定bitmap一个期望的宽高, 可以是屏幕宽高, 这样不至于获取bitmap的时候出现内存溢出现象

//from Resource
BitmapUtils.decodeBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight);

//from File
BitmapUtils.decodeFile(String path, int screenWidth, int screenHeight);

//createBitmap
BitmapUtils.createBitmap(Bitmap bitmap, int reqWidth, int reqHeight)




源码地址, 欢迎Star

https://github.com/jinguangyue/CodeLibrary

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值