Android文件/文件夹选择器(支持多选操作),已封装为lib库,直接添加依赖即可。
话不多少,先上图一览:

接下来我们开始写个app测试:
1、新建Android工程:FileSelectorTest
2、更改MainActivity:
在里面写四个textview模拟button,分别是文件单选,文件多选,文件夹路径单选,文件夹路径多选,然后重写textview点击事件进入FsActivity,传入参数不同,选择模式不同。
复写onActivityResult,用来获取从文件/文件夹选择器传递回来的数据。
package cn.darkranger.fileselectortest; import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;
import dr.android.fileselector.FileSelectConstant; public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private static final Integer FILE_SELECTOR_REQUEST_CODE = 2016; private TextView mFileTv;
private TextView mFileMultiTv;
private TextView mFolderTv;
private TextView mFolderMultiTv; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
initEvent();
} private void initView() {
mFileTv = (TextView) findViewById(R.id.id_mode_file);
mFileMultiTv = (TextView) findViewById(R.id.id_mode_file_multi);
mFolderTv = (TextView) findViewById(R.id.id_mode_folder);
mFolderMultiTv = (TextView) findViewById(R.id.id_mode_folder_multi);
} private void initData() { } private void initEvent() {
// 文件单选
mFileTv.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(getApplicationContext(), FsActivity.class);
intent.putExtra(FileSelectConstant.SELECTOR_REQUEST_CODE_KEY, FileSelectConstant.SELECTOR_MODE_FILE);
startActivityForResult(intent, FILE_SELECTOR_REQUEST_CODE);
}
});
// 文件多选
mFileMultiTv.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(getApplicationContext(), FsActivity.class);
intent.putExtra(FileSelectConstant.SELECTOR_REQUEST_CODE_KEY, FileSelectConstant.SELECTOR_MODE_FILE);
intent.putExtra(FileSelectConstant.SELECTOR_IS_MULTIPLE, true);
startActivityForResult(intent, FILE_SELECTOR_REQUEST_CODE);
}
}); // 文件夹单选
mFolderTv.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(getApplicationContext(), FsActivity.class);
intent.putExtra(FileSelectConstant.SELECTOR_REQUEST_CODE_KEY, FileSelectConstant.SELECTOR_MODE_FOLDER);
startActivityForResult(intent, FILE_SELECTOR_REQUEST_CODE);
}
}); // 文件夹多选
mFolderMultiTv.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(getApplicationContext(), FsActivity.class);
intent.putExtra(FileSelectConstant.SELECTOR_REQUEST_CODE_KEY, FileSelectConstant.SELECTOR_MODE_FOLDER);
intent.putExtra(FileSelectConstant.SELECTOR_IS_MULTIPLE, true);
startActivityForResult(intent, FILE_SELECTOR_REQUEST_CODE);
}
});
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent bundle) {
super.onActivityResult(requestCode, resultCode, bundle);
Log.i(TAG, "requestCode: " + requestCode + "; resultCode: " + resultCode);
if (resultCode == RESULT_OK) {
Toast.makeText(this, "paths: " + bundle.getStringArrayListExtra(FileSelectConstant.SELECTOR_BUNDLE_PATHS),
Toast.LENGTH_SHORT).show();
}
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
3、新建FsActivity
(1)添加依赖包DR-lib-fileselector:

(2)继承FileSelectActivity
(3)onCreate、onCreateOptionsMenu和onOptionsItemSelected直接使用FileSelectActivity的方法,super.xxx();
(4)复写FileSelectActivity的方法initParams,里面设置了一些基本的信息,包括选择文件的标题,选择文件夹路径的标题,文件夹的图标,文件的图标,图标宽度和高度,当然不写的话都使用默认值。
(5)还可以复写onBackPressed()和onClickOkBtn(),分别是下面虚拟返回键的操作和右上角选择完成后的操作。当然不写的话也都是用默认FileSelectActivity的默认操作
package cn.darkranger.fileselectortest; import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import dr.android.fileselector.FileSelectActivity; public class FsActivity extends FileSelectActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
} @Override
public void initParams() {
// 这些参数都有默认值,不设置也是可以的
// setSelectorFileTitle("this is file title");
// setSelectorFolderTitle("this is folder title");
// setSelectorFileIcon(R.drawable.ic_fileselect_file);
// setSelectorFolderIcon(R.drawable.ic_fileselect_folder);
// setSelectorIconHeight(150);
// setSelectorIconWidth(150); }
} @Override
public void onBackPressed() {
super.onBackPressed();
} @Override
public void onClickOkBtn() {
super.onClickOkBtn();
}
}
4、在AndroidManifest.xml中添加读写存储的权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.darkranger.fileselectortest"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="22" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="cn.darkranger.fileselectortest.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="cn.darkranger.fileselectortest.FsActivity"
android:label="@string/title_activity_fs" >
</activity>
</application> </manifest>
5、完成配置,并运行。
项目源码:http://files.cnblogs.com/files/wrcold520/FileSelectorTest.zip(lib包里面去掉了v4包,依赖于DR-lib-fileselector)
依赖包:http://files.cnblogs.com/files/wrcold520/DR-lib-fileselector.zip(lib包里面去掉了v4包,DR-lib-fileselector依赖包依赖于v7包,如下图,v7的依赖包里面有v4包)

Android文件/文件夹选择器(支持多选操作),已封装为lib库,直接添加依赖即可。的更多相关文章
- .h头文件 .lib库文件 .dll动态库文件之间的关系
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...
- android系统的文件夹选择器
aFileChooser: https://github.com/iPaulPro/aFileChooser/issues, 这个是最适合android的文件选择器,看看有无可能改成文件夹选择器. f ...
- Android源代码文件夹结构说明
在学习Android的过程中,学习写应用还好.一開始不用管太多代码.直接调用函数就能够了,可是工作中却须要改动到framework之类的东东 所以感觉開始纠结了,又是初学,非常多不懂,所以就去找了关于 ...
- (转)android res文件夹里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)
android res文件夹里面的drawable(ldpi.mdpi.hdpi.xhdpi.xxhdpi) (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),F ...
- android 获取文件夹、文件的大小 以B、KB、MB、GB 为单位
android 获取文件夹.文件的大小 以B.KB.MB.GB 为单位 public class FileSizeUtil { public static final int SIZETYPE_B ...
- java 查询路径中所有文件夹和文件的名称,支持文件名模糊查询
java 查询路径中所有文件夹和文件的名称,支持文件名模糊查询 有时候我们遇到需要查询服务器或者本机某个路径下有哪些文件?或者根据文件名称模糊搜索文件,那么就可以使用本方法:可以获取某个路径下所有文件 ...
- Android应用程序相关的文件文件夹具体解释
一.方法介绍: 每一个Android应用程序都能够通过Context来获取与应用程序相关的文件夹,这些文件夹的功能各异,每一个文件夹都有自己的特点.有时候可能会搞混淆,本文结合andr ...
- Android第三方文件选择器:aFileChooser
Android第三方文件选择器:aFileChooser aFileChooser是Android平台上的一个第三方文件选择器,其在github上的项目主页是:https://github.co ...
- 【全网首创】修改 Ext.ux.UploadDialog.Dialog 源码支持多选添加文件,批量上传文件
公司老框架的一个页面需要用到文件上传,本以为修改一个配置参数即可解决,百度一番发现都在说这个第三方插件不支持文件多选功能,还有各种各样缺点,暂且不讨论这些吧.先完成领导安排下来的任务. 任务一:支持多 ...
随机推荐
- p2114 起床困难综合症
传送门 分析 orz zwj 最好想到的方法是我们枚举每一位是0还是1,然后暴力求出经过n个操作之后的结果来决定这一位是0还是1 然后我们发现这种暴力的做法居然能a 但是还有更好的方法 我们只考虑开始 ...
- 101334E Exploring Pyramids
传送门 题目大意 看样例,懂题意 分析 实际就是个区间dp,我开始居然不会...详见代码(代码用的记忆化搜索) 代码 #include<iostream> #include<cstd ...
- CF570E Pig and Palindromes
完全不会这种类型的$dp$啊…… 考虑回文串一定是可以拆分成(偶数个字母 + 偶数个字母)或者(偶数个字母 + 一个字母 +偶数个字母),两边的偶数个字母其实是完全对称的.因为这道题回文串的长度是给定 ...
- Person.delete请求----强大的bug---下班之前总结整个过程
默认访问的是: findAll(query) 还有个findAll(ids,query) 只有findAll才调用了findEntity->findById: 那么我重写了findById,查询 ...
- a标签空的情况下 IE6 IE7下点击无效
如果给空a标签定义了宽度和高度且使用了absolute,则在IE6和IE7中点击无效. 两种解决方法(主要是针对a标签不能设置背景情况): 1.给a标签添加样式:background: ...
- Android 中 吐司显示不出来的原因分析
当你发现你的toast的show方法的确被执行了,但是却没有在界面中显示出来, 有问题的地方可能有两点: 1.Context上下文对象有问题,不是当前的上下文对象或者什么的: 2.message(即T ...
- C#中的线程池使用(二)
线程池是后台线程.每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中.每个进程只有一个线程池对象. 下面说一下线程池中的异常,在线程池中未处理的异常将终止进程.以下为此规则的三种例外 ...
- Java开发环境的搭建-JDK的安装
一.下载 JDK是个免费的东东,所以不要去百度啥破解版了,直接去官网下载最新版本吧,比较安全, 下载地址 如下图所示 - 点击上图中的圈中部分,之后会下图的部分. 根据你的电脑系统是64位,还是32位 ...
- Python3中装饰器的使用
较为复杂的装饰器使用: user,passwd = 'hjc',111111 def auth(type): print('auth type:',type) def outwrapper(func) ...
- Linux文件属性用户、组、权限
Linux系统中的用户是分角色的,用户的角色是由UID和GID来识别的(也就是说系统识别的是用户的UID.GID,而非用户用户名),有个UID是唯一的(系统中唯一如同身份证一样)用来标识系统的用户账号 ...