• 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包)

      

  • 相关阅读:
    C++中函数模板template的使用
    C++中模板template和类class的结合使用
    Python中shuffle函数
    Python中利用tkinter模块构建图形用户界面GUI
    Python中怎样初始化一个类类class?
    Python中字典的has_key方法在3.4版本中改为in
    Python中怎样对数据集整体进行映射转换类型
    matlab中怎样对矩阵的某一列进行排序而使得其他列对应移动??
    Python中怎样使用shape计算矩阵的行和列
    27.反射2.md
  • 原文地址:https://www.cnblogs.com/wrcold520/p/5543659.html
Copyright © 2020-2023  润新知