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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM