Android:快速选择文件夹或指定多个扩展名的文件

2015年08月17日 Android 暂无评论 阅读6285次

近期经常会遇到一个选择Android手机上存储中某个文件夹的问题。

本文发的是一个自定义的对话框,实现的功能就是弹出手机上所有文件夹/指定扩展名的文件,按下确定后,可以返回用户选择的文件/文件夹的路径。

先看效果图:

Image

代码很简单的。基本就是继承Dialog类,在增加一个回调事件来返回文件/文件夹的路径地址。

因为要考虑到用户是想要选择文件夹还是指定某个扩展名的文件或是所有类型的文件,所以在Dialog的构造方法中使用了不定长参数。

public FolderFilePicker(Context context, PickPathEvent event, String... extensions)


使用过程中会有下面几种情况:

  • 若只想选择文件夹,则只需要传递前两个参数即可FolderFilePicker picker = new FolderFilePicker(context, event);
  • 若想选择指定扩展名的文件,则在第三个参数中写出即可FolderFilePicker picker = new FolderFilePicker(context, event, "jpg");
  • 若想选择多个扩展名的文件,则在第三个参数中继续写出即可FolderFilePicker picker = new FolderFilePicker(context, event, "jpg", "png");
  • 若想选择任意扩展名的文件,则在第三个参数中指定为*即可FolderFilePicker picker = new FolderFilePicker(context, event, "*")、


这是构造方法的第三个参数的说明,另外第二个参数是我自定义的一个回调,用来接收选择的具体文件/文件夹路径。

示例:

new PickPathEvent() {
    @Override
    public void onPickEvent(String resultPath) {
     Toast.makeText(MainActivity.this, resultPath, Toast.LENGTH_LONG).show();
    }
}

其中resultPath就是对话框返回的路径字符串。

最后,调用picker.show()就可以使其显示使用了。


遇到的问题


主要说一下对话框的标题栏显示不全标题的问题。

标题栏用来显示当前所在路径的作用,当点击了一个文件夹进去之后,标题栏则会更新为当前路径,当返回到上一层时,同样也会更新。

在测试中发现,当现在所处的路径比较深时,对话框的标题栏就会显示不全,只显示前面一部分。

因为没找到扩展标准对话框中标题栏的设置,所以在自定义对话框中,把标题栏去掉,在布局文件中顶部加了一个TextView充当标题栏。

此时就可以通过对TextView设置属性来使其跑马灯显示了。

增加了下面三行代码:

android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"


请特别注意最后两行代码不要忘记添加,返回跑马灯会跑不起来的。

最后,还要说明的是,AndroidManifest.xml中不要忘记添加如下权限申请,否则,你的list中将会是空的,看不到任何文件。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


最后,我把这个作为了libary工程放到了gitbub上,有需要的可以参考下,有问题或好的建议麻烦指出。多谢!

github地址:https://github.com/will86/folderfilepicker

分享本文至:

WRITTEN BY

avatar
本文标签:githubdialog
看了本文是不是觉得很赞,那就赶紧点击下面按钮分享给身边的朋友吧!

欢迎留言




用户登录

sitemap