AndroidFilePicker
I 简介
? FilePicker 是一个小巧快速的文件选择器框架,以快速集成、高自定义化和可配置化为目标不断前进~?
II 使用
- 在你的项目中添加依赖
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
复制代码
dependencies {
implementation 'me.rosuh:AndroidFilePicker:latest_version'
}
复制代码
latest_version
请自行替换成最新版本
- 开始使用(
Kotlin
)
简单的链式调用示意:
/**
* 自定义文件过滤器,此处使用库默认的文件类型
*/
private val fileFilter = object : AbstractFileFilter(){
override fun doFilter(listData: ArrayList<FileItemBean>): ArrayList<FileItemBean> {
val iterator = listData.iterator()
while (iterator.hasNext()){
val item = iterator.next()
// 如果是文件夹则略过
if (item.isDir) continue
// 判断文件类型是否是图片
if (item.fileType !is RasterImageFileType){
iterator.remove()
}
}
return listData
}
}
...
FilePickerManager.instance
.from(this@SampleActivity)
// 主题设置
.setTheme(R.style.FilePickerThemeReply)
// 自定义过滤器(可选)
.filter(fileFilter)
.forResult(FilePickerManager.instance.REQUEST_CODE)
复制代码
获取结果:onActivityResult
接受消息,然后调用FilePickerManager.obtainData()
获取保存的数据,结果是所选取文件的路径列表(ArrayList<String>()
)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
when (requestCode) {
FilePickerManager.instance.REQUEST_CODE -> {
if (resultCode == Activity.RESULT_OK) {
val list = FilePickerManager.instance.obtainData()
rv!!.adapter = SampleAdapter(R.layout.demo_item, ArrayList(list))
rv!!.layoutManager = LinearLayoutManager(this@SampleActivity)
} else {
Toast.makeText(this@SampleActivity, "没有选择图片", Toast.LENGTH_SHORT).show()
}
}
}
}
复制代码
功能 & 特点
- 链式调用
- 内置四种主题配色 + 可自定义配色
- 查看主题颜色示意图,然后调用
setTheme()
传入自定义主题
- 查看主题颜色示意图,然后调用
- 默认实现多种文件类型
- 实现
IFileType
接口来实现你的文件类型 - 实现
AbstractFileType
抽象类来实现你的文件类型甄别器
- 实现
- 公开文件过滤接口
- 实现
AbstractFileFilter
抽象类来定制你自己的文件过滤器,这样可以控制文件列表的展示内容
- 实现
- 多种可配置选项
- 选中时是否忽略文件夹
- 是否显示隐藏文件夹(以符号
.
开头的,视为隐藏文件或隐藏文件夹) - 可配置导航栏的文本,默认显示、多选文本、取消选择文本以及根目录默认名称
- 公开条目(
item
)选择监听器,可自定义条目被点击的实现
部分源码说明
-
包和文件夹
-
adapter
包:两个列表(导航栏和文件列表)的数据适配器类 -
bean
包:所有用到的Model
类IFileBean
是文件对象所需要实现的接口
-
config
:管理类、配置类所在AbstractFileFilter
:文件过滤器抽象类,用于给调用者自实现文件过滤器AbstractFileType
:文件类型抽象类,用于给调用者自实现自己的文件类型- 其中的抽象函数
fillFileType
为文件甄别器,如果你实现了自己的文件类型,那么最好也要实现自己的文件甄别器
- 其中的抽象函数
DefaultFileType
:默认文件类型,文件类型类的默认实现,里面实现了默认的文件甄别器
-
filetype
:一些默认实现的文件类型- 实现接口
IFileType
以实现自己的文件类型
- 实现接口
-
utils
:一些工具类FileUtils
类包含了文件相关的大部分所需的函数PercentLayoutUtils
、PercentTextView
是TextView
的相对布局实现(*1)
-
Log
<0.2.0>_2018-11-27
:recycle: :art: :rocket: :memo:
Add
- 链式调用
- 添加文件类型抽象类
- 公开文件类型接口
- 添加文件过滤抽象类
- 公开文件过滤器接口
- 公开条目点击接口,可以自实现条目点击效果
- 添加界面字符串自定义功能
- 返回键返回上层目录功能
- 添加 FilePickerConfig 类保存配置
- 新增四种主题配色
Update
- 文件类型可由调用者自己实现,也可以使用默认实现
- FileItemBean 添加图标资源变量,支持自定义类型图标
- 调用 FilePickerManager.obtainData() 获取数据,Intent 仅作消息发送功能
- 更新部分文件类型默认 icon
- README
TODO
- 列表项可打开,可配置打开方式
- 更优雅的方式获取返回结果,
onActivityResult()
只发送通知消息,从另一容器拿到结果 - 默认视图美观度提升
- 链式调用
- 记住父文件夹浏览位置
- 解耦视图和控制逻辑,为后续自定义布局铺路
作者是个菜鸡,所以强烈欢迎 Issues 和各种 PR!!
能 Star 当然是最好的啦~