Android 文件选择/文件管理

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

详细文档请 点击这里

~ 喵

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值