Android 文件选择/文件管理

·  阅读 2426

ZFileManager 诞生于之前项目的各种SX需求,需求改了N遍后忍无可忍,直接一股脑重写再封装!最后再此基础上修改选择开源。完整代码查看GitHub ,有帮助记得start一下哦!!!

ZFileManager 特点

  • 默认支持 音频,视频,图片,txt,zip,word,excel,ppt,pdf 9种文件
  • 支持音频、视频播放,图片查看,zip解压,文件重命名、复制、移动、删除、查看详情
  • 支持查看指定文件类型,支持文件类型拓展,支持嵌套在Fragment中使用
  • 支持多选,数量、文件大小限制、实时排序、指定文件路径访问
  • 支持QQ、微信文件选择 && 支持自定义获取QQ、微信文件
  • 不含任何三方框架,极高的定制化,支持Android 10/11/12/++、AndroidX、DSL

部分截图

使用

温馨提示: targetSdkVersion >= 29 清单文件中加上 android:requestLegacyExternalStorage="true"

Step 0. 添加依赖

最新版本

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)
    }
}

// 在调用前或Application中初始化 
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 0. 新建一个类: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 1. 新建一个类:ZFileTypeListener,重写里面的getFileType()方法 (有多个自定义类型,公用即可)


class MyFileTypeListener : ZFileTypeListener() {

    override fun getFileType(filePath: String) =
        when (ZFileHelp.getFileTypeBySuffix(filePath)) {
            APK -> ApkType()
            else -> super.getFileType(filePath)
        }
}

复制代码

Step 2. 在调用前或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()        
    }

复制代码
更多操作请点击这里

一切都源自之前的项目,从简单的一个文件选取列表 到 需要预览文件,再到QQ微信文件选择,每一次的需求变更都意味着又TM要重写了。干脆全部推倒重来,于是乎该库就诞生了,干就完事了...

分类:
Android
标签:
收藏成功!
已添加到「」, 点击更改