展会信息港展会大全

Android目录选择器
来源:互联网   发布日期:2016-01-14 11:24:50   浏览:2448次  

导读:chooserdialog.xml?xml version=1.0 encoding=utf-8?LinearLayout xmlns:android=http://schemas.android.com/apk/res/androidandroid:orientation=vertical...

chooserdialog.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<LinearLayout

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="40dip">

<Button

android:id="@+id/btn_home"

android:layout_width="40dip"

android:layout_height="40dip"

android:text="HOME"

android:layout_gravity="left"

android:layout_weight="1"

/>

<LinearLayout

android:id="@+id/dir_layout"

android:layout_width="140dip"

android:layout_height="35dip"

android:gravity="center"

android:layout_weight="1">

</LinearLayout>

<!-- <TextView android:layout_width="140dip" android:layout_height="35dip"

android:id="@+id/dir_str" android:gravity="center" android:layout_weight="1"

/> -->

<Button

android:id="@+id/btn_back"

android:layout_width="40dip"

android:layout_height="40dip"

android:text="BACK"

android:layout_gravity="right"

android:layout_weight="1"

/>

</LinearLayout>

<ListView

android:id="@+id/list_dir"

android:layout_width="fill_parent"

android:layout_height="300dip"

/>

<Button

android:id="@+id/btn_ok"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="OK"

/>

</LinearLayout>

Dirchooserdialog代码

package hkp.dirchooser;

import java.io.File;

import java.util.ArrayList;

import java.util.List;

import android.app.Dialog;

import android.content.Context;

import android.os.Bundle;

import android.os.Environment;

import android.os.Handler;

import android.view.Gravity;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.EditText;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;

/**

* @author HKP 2011-6-17

*

*/

public class DirChooserDialog extends Dialog implements

android.view.View.OnClickListener {

private ListView list;

ArrayAdapter<String> Adapter;

ArrayList<String> arr = new ArrayList<String>();

Context context;

private String path;

private TextView title;

private EditText et;

private Button home, back, ok;

private LinearLayout titleView;

private int type = 1;

private String[] fileType = null;

public final static int TypeOpen = 1;

public final static int TypeSave = 2;

/**

* @param context

* @param type

* 值为1表示创建打开目录类型的对话框,2为创建保存文件到目录类型的对话框

* @param fileType

* 要过滤的文件类型,null表示只选择目录

* @param resultPath

* 点OK按钮返回的结果,目录或者目录+文件名

*/

public DirChooserDialog(Context context, int type, String[] fileType,

String resultPath) {

super(context);

this.context = context;

this.type = type;

this.fileType = fileType;

this.path = resultPath;

}

/**

* (non-Javadoc)

*

* @see android.app.Dialog#dismiss()

*/

@Override

public void dismiss() {

// TODO Auto-generated method stub

super.dismiss();

}

/**

* (non-Javadoc)

*

* @see android.app.Dialog#onCreate(android.os.Bundle)

*/

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.chooserdialog);

path = getRootDir();

arr = (ArrayList<String>) getDirs(path);

Adapter = new ArrayAdapter<String>(context,

android.R.layout.simple_list_item_1, arr);

list = (ListView) findViewById(R.id.list_dir);

list.setAdapter(Adapter);

list.setOnItemClickListener(lvLis);

home = (Button) findViewById(R.id.btn_home);

home.setOnClickListener(this);

back = (Button) findViewById(R.id.btn_back);

back.setOnClickListener(this);

ok = (Button) findViewById(R.id.btn_ok);

ok.setOnClickListener(this);

titleView = (LinearLayout) findViewById(R.id.dir_layout);

if (type == TypeOpen) {

title = new TextView(context);

titleView.addView(title);

title.setText(path);

} else if (type == TypeSave) {

et = new EditText(context);

et.setWidth(240);

et.setHeight(70);

et.setGravity(Gravity.CENTER);

et.setPadding(0, 2, 0, 0);

titleView.addView(et);

et.setText("wfFileName");

}

// title = (TextView) findViewById(R.id.dir_str);

// title.setText(path);

}

// 动态更新ListView

Runnable add = new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

arr.clear();

// System.out.println("Runnable path:"+path);

// 必须得用这种方法为arr赋值才能更新

List<String> temp = getDirs(path);

for (int i = 0; i < temp.size(); i++)

arr.add(temp.get(i));

Adapter.notifyDataSetChanged();

}

};

private OnItemClickListener lvLis = new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,

long arg3) {

String temp = (String) arg0.getItemAtPosition(arg2);

// System.out.println("OnItemClick path1:"+path);

if (temp.equals(".."))

path = getSubDir(path);

else if (path.equals("/"))

path = path + temp;

else

path = path + "/" + temp;

// System.out.println("OnItemClick path2"+path);

if (type == TypeOpen)

title.setText(path);

Handler handler = new Handler();

handler.post(add);

}

};

private List<String> getDirs(String ipath) {

List<String> file = new ArrayList<String>();

// System.out.println("GetDirs path:"+ipath);

File[] myFile = new File(ipath).listFiles();

if (myFile == null) {

file.add("..");

} else

for (File f : myFile) {

// 过滤目录

if (f.isDirectory()) {

String tempf = f.toString();

int pos = tempf.lastIndexOf("/");

String subTemp = tempf.substring(pos + 1, tempf.length());

// String subTemp =

// tempf.substring(path.length(),tempf.length());

file.add(subTemp);

// System.out.println("files in dir:"+subTemp);

}

// 过滤知道类型的文件

if (f.isFile() && fileType != null) {

for (int i = 0; i < fileType.length; i++) {

int typeStrLen = fileType[i].length();

String fileName = f.getPath().substring(

f.getPath().length() - typeStrLen);

if (fileName.toLowerCase().equals(fileType[i])) {

file.add(f.toString().substring(path.length() + 1,

f.toString().length()));

}

}

}

}

if (file.size() == 0)

file.add("..");

// System.out.println("file[0]:"+file.get(0)+" File size:"+file.size());

return file;

}

/**

* (non-Javadoc)

*

* @see android.view.View.OnClickListener#onClick(android.view.View)

*/

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

if (v.getId() == home.getId()) {

path = getRootDir();

if (type == TypeOpen)

title.setText(path);

Handler handler = new Handler();

handler.post(add);

} else if (v.getId() == back.getId()) {

path = getSubDir(path);

if (type == TypeOpen)

title.setText(path);

Handler handler = new Handler();

handler.post(add);

} else if (v.getId() == ok.getId()) {

dismiss();

if (type == TypeSave)

path = path + "/" + et.getEditableText().toString() + ".wf";

Toast.makeText(context, path, Toast.LENGTH_SHORT).show();

}

}

private String getSDPath() {

File sdDir = null;

boolean sdCardExist = Environment.getExternalStorageState().equals(

android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在

if (sdCardExist) {

sdDir = Environment.getExternalStorageDirectory();// 获取根目录

}

if (sdDir == null) {

// Toast.makeText(context,

// "No SDCard inside!",Toast.LENGTH_SHORT).show();

return null;

}

return sdDir.toString();

}

private String getRootDir() {

String root = "/";

path = getSDPath();

if (path == null)

path = "/";

return root;

}

private String getSubDir(String path) {

String subpath = null;

int pos = path.lastIndexOf("/");

if (pos == path.length()) {

path = path.substring(0, path.length() - 1);

pos = path.lastIndexOf("/");

}

subpath = path.substring(0, pos);

if (pos == 0)

subpath = path;

return subpath;

}

}

Mainactivity代码

package hkp.dirchooser;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button btn = (Button) findViewById(R.id.btn_open);

btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

String path = null;

String[] fileType = { "dst" };// 要过滤的文件类型列表

DirChooserDialog dlg = new DirChooserDialog(MainActivity.this,

2, fileType, path);

dlg.setTitle("Choose dst file dir");

dlg.show();

}

});

}

}

赞助本站

人工智能实验室

相关热词: 目录 选择器

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港