原文地址:http://blog.csdn.net/u012527802/article/details/70236398
https://www.jianshu.com/p/eeb211e190be
项目GitHub地址:https://github.com/leonHua/LFilePicker
在 Android 开发中如果需要选择某个文件,可以直接调取系统的文件管理器进行选择,但是无法保证各个厂商的手机界面一致,而且解析Uri 还比较繁琐,如果还需要多选呢?需要文件类型过滤呢?老板说界面丑呢?
那么福利来了,你可以使用LFilePicker,它都支持什么呢?
- 多种界面风格
- 支持文件多选或者单选
- 支持文件类型过滤
- 支持Fragment启动
- 自定义标题文字和颜色
- 国际化(中英文切换)
- 最大数量限制
- 全选或者全部取消
- 文件夹路径选择
- 文件大小过滤
- 默认路径指定
- 在哪里能找到它呢?Bio Bio Bio
版本更新:
V1.7.0
- 增加接口指定初始显示路径
- 增加接口可以过滤文件大小,大于指定大小或者小于指定大小
V1.6.0
- 增加文件夹路径选择
V1.5.0
- 全选校验,避免数据重复添加
- 单选模式下不在显示全选操作
V1.4.0
- 最大数量限制 (withMaxNum)
- 全选或者全部取消
心急的人可以直接根据说明文档进行使用了,任性的人跟着我继续走~~~
先看看界面,万一丑的不行呢?
好了还算可以把,和经典的Windows风格类似,先用用看吧。怎么用呢?
基础用法
1.添加依赖
compile 'com.leon:lfilepickerlibrary:1.7.0'
【P.S.】 话说为了能够方便的依赖使用可是操碎了心,将项目库开源到JCenter使用的过程中趟了很多坑,如果感兴趣,可以查看文章:新版Bintray下将Android Library 开源到JCenter 的正确姿势
另外,如果网络环境有问题无法正常使用compile指令(像我这样),良心提供 aar 文件下载使用。
下载链接:lfilepickerlibrary
【P.S.】 如果不知道 aar 如何使用,请参考文章:Android中 aar 文件的日常使用
2.添加文件读写权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3.打开选择界面
你可以在Activity中打开:
1.7.0中使用方法
int REQUESTCODE_FROM_ACTIVITY = 1000;
new LFilePicker()
.withActivity(MainActivity.this)
.withRequestCode(REQUESTCODE_FROM_ACTIVITY)
.withStartPath("/storage/emulated/0/Download")//指定初始显示路径
.withIsGreater(false)//过滤文件大小 小于指定大小的文件
.withFileSize(500 * 1024)//指定文件大小为500K
.start();
也可以在Fragment中打开(同时支持v4包SupportFragment):
new LFilePicker().withSupportFragment(mFragment)
.withRequestCode(Consant.REQUESTCODE_FROM_FRAGMENT)
.withTitle("Open From Fragment")
.start();
4.接收选择返回值
重写方法并获取数据:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == Consant.REQUESTCODE_FROM_ACTIVITY) {
List<String> list = data.getStringArrayListExtra(Constant.RESULT_INFO);
Toast.makeText(getApplicationContext(), "选中了" + list.size() + "个文件", Toast.LENGTH_SHORT).show();
}
}
}
1.7.0中接收返回结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == REQUESTCODE_FROM_ACTIVITY) {
//如果是文件选择模式,需要获取选择的所有文件的路径集合
//List<String> list = data.getStringArrayListExtra(Constant.RESULT_INFO);//Constant.RESULT_INFO == "paths"
List<String> list = data.getStringArrayListExtra("paths");
Toast.makeText(getApplicationContext(), "选中了" + list.size() + "个文件", Toast.LENGTH_SHORT).show();
//如果是文件夹选择模式,需要获取选择的文件夹路径
String path = data.getStringExtra("path");
Toast.makeText(getApplicationContext(), "选中的路径为" + path, Toast.LENGTH_SHORT).show();
}
}
}
已经以上你已经能够正常使用了,但是说好的那么多特性呢?接下来,深入一点
接口方法
方法说明
方法 | 说明 |
---|---|
withActivity(Activity activity) | 绑定Activity |
withFragment(Fragment fragment) | 绑定Fragment |
withSupportFragment(Fragment supportFragment) | 绑定V4包Fragment |
withRequestCode(int requestCode) | 设置请求码 |
withTitle(String title) | 设置标题文字 |
withTitleColor(String color) | 设置标题文字颜色 |
withBackgroundColor(String color) | 设置标题背景颜色 |
withIconStyle(int style) | 设置列表图标样式 |
withBackIcon(int backStyle) | 设置返回图标样式 |
withFileFilter(String[] arrs) | 设置文件类型过滤器 |
withMutilyMode(boolean isMutily) | 设置多选或单选模式 |
withAddText(String text) | 设置多选模式选中文字 |
withNotFoundBooks(String text) | 设置没有选中文件时的提示信息 |
withMaxNum(int num) | 设置最大可选文件数量 |
withChooseMode(boolean chooseMode) | 设置文件夹选择模式,true(默认)为选择文件,false为选择文件夹 |
withStartPath(String path) | 设置初始显示路径 |
withIsGreater(boolean isGreater) | 设置过滤方式,true(默认)为大于指定大小,false小于指定大小 |
withFileSize(long size) | 设置指定过滤文件大小,如果是500K则输入500*1024 |
自由使用
文件夹和文件图标太low?换!
new LFilePicker()
.withActivity(this)
.withRequestCode(Consant.REQUESTCODE_FROM_ACTIVITY)
.withIconStyle(Constant.ICON_STYLE_YELLOW)
.start();
withIconStyle(mIconType)提供三种风格:
-
Constant.ICON_STYLE_YELLOW 经典黄(默认风格)
-
Constant.ICON_STYLE_GREEN 清新绿
-
Constant.ICON_STYLE_BLUE 柔和蓝
选择界面标题不合适?换!
new LFilePicker()
.withActivity(this)
.withRequestCode(Consant.REQUESTCODE_FROM_ACTIVITY)
.withTitle("我的标题")//标题文字
.withTitleColor("#FF99CC")//文字颜色
.start();
想要限制单选或者多选?换!
new LFilePicker()
.withActivity(this)
.withRequestCode(Consant.REQUESTCODE_FROM_ACTIVITY)
.withMutilyMode(true)
.start();
withMutilyMode(true):true代表多选;false代表单选
想要限制选择文件类型?过滤!
new LFilePicker()
.withActivity(this)
.withRequestCode(Consant.REQUESTCODE_FROM_ACTIVITY)
.withFileFilter(new String[]{".txt", ".png"})
.start();
英文怎么搞?已经内置实现!
将手机语言调整为英文后:
返回图标不喜欢?换!
new LFilePicker()
.withActivity(this)
.withRequestCode(Consant.REQUESTCODE_FROM_ACTIVITY)
.withBackIcon(Constant.BACKICON_STYLEONE)
.start();
withBackIcon() 提供三种风格:
-
Constant.BACKICON_STYLEONE
-
Constant.BACKICON_STYLETWO
-
Constant.BACKICON_STYLETHREE
标题背景颜色不喜欢?换!
new LFilePicker()
.withActivity(this)
.withRequestCode(Consant.REQUESTCODE_FROM_ACTIVITY)
.withBackgroundColor("#FF9966")
.start();
切换选择路径?已经包含,随便选!