话不多少,先上图一览:

接下来我们开始写个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库,直接添加依赖即可。的更多相关文章

  1. .h头文件 .lib库文件 .dll动态库文件之间的关系

    .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...

  2. android系统的文件夹选择器

    aFileChooser: https://github.com/iPaulPro/aFileChooser/issues, 这个是最适合android的文件选择器,看看有无可能改成文件夹选择器. f ...

  3. Android源代码文件夹结构说明

    在学习Android的过程中,学习写应用还好.一開始不用管太多代码.直接调用函数就能够了,可是工作中却须要改动到framework之类的东东 所以感觉開始纠结了,又是初学,非常多不懂,所以就去找了关于 ...

  4. (转)android res文件夹里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)

    android res文件夹里面的drawable(ldpi.mdpi.hdpi.xhdpi.xxhdpi) (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),F ...

  5. android 获取文件夹、文件的大小 以B、KB、MB、GB 为单位

    android 获取文件夹.文件的大小 以B.KB.MB.GB 为单位   public class FileSizeUtil { public static final int SIZETYPE_B ...

  6. java 查询路径中所有文件夹和文件的名称,支持文件名模糊查询

    java 查询路径中所有文件夹和文件的名称,支持文件名模糊查询 有时候我们遇到需要查询服务器或者本机某个路径下有哪些文件?或者根据文件名称模糊搜索文件,那么就可以使用本方法:可以获取某个路径下所有文件 ...

  7. Android应用程序相关的文件文件夹具体解释

    一.方法介绍:         每一个Android应用程序都能够通过Context来获取与应用程序相关的文件夹,这些文件夹的功能各异,每一个文件夹都有自己的特点.有时候可能会搞混淆,本文结合andr ...

  8. Android第三方文件选择器:aFileChooser

     Android第三方文件选择器:aFileChooser aFileChooser是Android平台上的一个第三方文件选择器,其在github上的项目主页是:https://github.co ...

  9. 【全网首创】修改 Ext.ux.UploadDialog.Dialog 源码支持多选添加文件,批量上传文件

    公司老框架的一个页面需要用到文件上传,本以为修改一个配置参数即可解决,百度一番发现都在说这个第三方插件不支持文件多选功能,还有各种各样缺点,暂且不讨论这些吧.先完成领导安排下来的任务. 任务一:支持多 ...

随机推荐

  1. Qt测试计算时间

    博客转载自:https://blog.csdn.net/lg1259156776/article/details/52325508 一.标准C和C++都可用 1. 获取时间用time_t time( ...

  2. ARC100C Linear Approximation

    传送门 分析 这道题真的好水呀QwQ,想必大家都知道对于式子|x-2|+|x-3|x取什么值可以使式子结果最小,这道题也是这个原理,只需要将要额外减的1.2.3……提前减掉就行了. 代码 #inclu ...

  3. 数据结构 Job

    问题描述 有 n 项工作在等待队列中等待处理,编号为 1-n. 每个工作有个优先级 p.处理机同一时间只能处理一项工作.处理机决定接下来处理哪一项工作的方式为:从队首取出一项工作 x,若等待队列中没有 ...

  4. jQuery CSS 操作

    jQuery CSS 操作 jQuery 拥有三种用于 CSS 操作的重要函数: $(selector).css(name,value) $(selector).css({properties}) $ ...

  5. 二维码的生成细节和原理 -- 转http://news.cnblogs.com/n/191671/

    二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字 ...

  6. Altium Designer 3D模型的下载与添加

    先 先晒几个图:是不是很逼真啊..  ---------------------------------------教程---------------------------------------- ...

  7. asp 控件定时器 局部刷新

    <asp:ScriptManager ID="ScriptManager1" runat="server" /> <asp:UpdatePan ...

  8. Python翻译器

    import urllib.request import urllib.parse import json content='有了我,翻译再也不是问题啦' print(content) while c ...

  9. 2017ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)

    Little Boxes Problem Description Little boxes on the hillside.Little boxes made of ticky-tacky.Littl ...

  10. html5 语音识别 转