话不多少,先上图一览:

接下来我们开始写个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. Ubuntu重启关机命令使用

    如果你想保持当前用户的登录而且使用root用户执行命令 可以输入:su root,输入密码 可以运行,shutdown 命令 重启命令: 1.reboot 2.shutdown -r now 立刻重启 ...

  2. JavaPersistenceWithHibernate第二版笔记-第七章-001Mapping a set(@ElementCollection、@CollectionTable、@JoinColumn、)

    一.结构 二.代码 1. package org.jpwh.model.collections.setofstrings; import org.jpwh.model.Constants; impor ...

  3. Luogu 4323 [JSOI2016]独特的树叶

    新技能get 树哈希,考虑到两棵树相同的条件,把每一个结点的哈希值和树的siz写进哈希值里去. 做出A树每一个结点为根时的树的哈希值丢进set中,然后暴力枚举B树中度数为1的点,求出删掉这个点之后的哈 ...

  4. python常用uuid模块

    uuid.uuid4(),会根据我们当前的网卡和时间生成的一个随机字符串. 注意:uuid.uuid4()生成的是一个对象,需要强转为字符串. uid = str(uuid.uuid4()) #当前网 ...

  5. jQuery 插件开发——countdown(倒计时)

    故事背景:按照惯例,先写下故事背景,其实也是再次汇报下最近开发情况的.做电商的都知道,这是个活动季啊,双十一.双十二.元旦....各种啊..其实说这么多就是想表达最近比较忙.呵呵^_^,正好今天抽点空 ...

  6. java 学习第二篇关系运算符和布尔值

    关系运算符,顾名思义.用来看什么关系.(也就是用来比较) 看下表 JAVA 关系运算符 a=6,b=5 关系运算符 举例 值 解释 > a>b true a大于b < a<b ...

  7. 与HDFS交互- By web界面

    开启方式 linux系统 eg :ubuntu 浏览器 eg:firefox HDFS的web管理界面地址:localhost:50070/ 具体理解有待后续学习....

  8. CSS选择器及CSS样式表

    前言 牛腩新闻发布系统中记忆最深的就是各种CSS选择器各种CSS样式,这些选择器之间肯定有它的优先级,包括CSS样式也一样,也是有它的优先级,本文介绍一些各种CSS选择器各种CSS样式以及它们的优先级 ...

  9. 解决vue-cli相对路径问题 about css assert path ,two Solution(css路径的问题解决方案) #179

    https://github.com/vuejs/vue-cli/issues/179

  10. java插入图片到数据库(可以批量)

    package sundun.zfpt.gg.web; import java.io.File; import java.io.FileInputStream; import java.sql.Con ...