ZFileManager的诞生,离不开系统自带的文件管理!自带的文件管理在没有特殊需求下,那是YYDS!一旦有点定制化的需求就…就… 本猿遇到的特殊需求那可就太多太多太多了。为了以后能够轻松的完成工作,特意在原基础上另(fu)起(zhi)炉(zhan)灶(tie),并且做了诸多改进,造就史上最Diao 文件管理/选择 框架,完整代码已上传至GitHub
ZFileManager 特点
- 默认支持 音频,视频,图片,txt,zip,word,excel,ppt,pdf 9种文件
- 支持音频、视频播放,图片查看,zip解压,文件重命名、复制、移动、删除、查看详情
- 支持查看指定文件类型,支持文件类型拓展,支持嵌套在Fragment中使用
- 支持多选,数量、文件大小限制、实时排序、指定文件路径访问、文件夹角标
- 支持QQ、微信文件选择 && 支持自定义获取QQ、微信文件
- 支持 Android/data、Android/obb 数据获取,同时支持自定义
- 不含任何三方框架,极高的定制化,支持Android 10/11/12/++、AndroidX、DSL
部分截图(下载demo直接体验)
使用(Java使用)
温馨提示: targetSdkVersion >= 29 清单文件中加上 android:requestLegacyExternalStorage=“true”
Step 0. 添加依赖
最新版本
// Android 10 及以上版本查看最新版本
Step 1. 实现ZFileImageListener,并在调用前或Application中初始化
class MyFileImageListener : ZFileImageListener() {
override fun loadImage(imageView: ImageView, file: File) {
// 以Glide为例
Glide.with(imageView.context)
.load(file)
.apply(RequestOptions().apply {
placeholder(R.drawable.ic_zfile_other)
error(R.drawable.ic_zfile_other)
})
.into(imageView)
}
}
// 在调用前初始化
getZFileHelp().init(MyFileImageListener())
Step 2. 在Activity或Fragment中使用
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
main_defaultMangerBtn.setOnClickListener {
zfile {
result {
setFileListData(this)
}
}
}
}
private fun setFileListData(fileList: MutableList<ZFileBean>?) {
val sb = StringBuilder()
fileList?.forEach {
sb.append(it).append("\n\n")
}
main_resultTxt.text = sb.toString()
}
}
高级用法
文件类型拓展
Step 1. 新建一个类:ZFileType,重写里面的openFile()、loadingFile()方法
// 自定义的类型
const val APK = "apk"
/**
* 自定义Apk文件类型
*/
class ApkType : ZFileType() {
/**
* 打开文件
* @param filePath 文件路径
* @param view 当前视图
*/
override fun openFile(filePath: String, view: View) {
Toast.makeText(view.context, "打开自定义拓展文件", Toast.LENGTH_SHORT).show()
}
/**
* 加载文件
* @param filePath 文件路径
* @param pic 文件展示的图片
*/
override fun loadingFile(filePath: String, pic: ImageView) {
pic.setImageResource(R.mipmap.ic_launcher_round)
}
}
Step 2. 新建一个类:ZFileTypeListener,重写里面的getFileType()方法 (有多个自定义类型,公用即可)
class MyFileTypeListener : ZFileTypeListener() {
override fun getFileType(filePath: String) =
when (ZFileHelp.getFileTypeBySuffix(filePath)) {
APK -> ApkType()
else -> super.getFileType(filePath)
}
}
Step 3. 在调用前或Application中配置
getZFileHelp().setFileTypeListener(MyFileTypeListener())
QQ或微信文件选择
super_qqTxt.setOnClickListener {
// 打开QQ文件选择
zfile {
config {
ZFileConfiguration().apply {
filePath = ZFileConfiguration.QQ
}
}
result {
setResult(this)
}
}
}
super_wechatTxt.setOnClickListener {
// 打开微信文件选择
zfile {
config {
ZFileConfiguration().apply {
filePath = ZFileConfiguration.WECHAT
}
}
result {
setResult(this)
}
}
}
private fun setResult(selectList: MutableList<ZFileBean>?) {
val sb = StringBuilder()
selectList?.forEach {
sb.append(it).append("\n\n")
}
super_resultTxt.text = sb.toString()
}
详细文档请 点击这里
~ 喵