Android(安卓)目录选择器
16lz
2021-01-26
chooserdialog.xml
[html] view plain copy- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns: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:layout_width="40dip"
- android:layout_height="40dip"
- android:text="HOME"
- android:id="@+id/btn_home"
- android:layout_gravity="left"
- android:layout_weight="1"
- />
- <LinearLayoutandroid:layout_width="140dip"
- android:layout_height="35dip"
- android:id="@+id/dir_layout"
- 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:layout_width="40dip"
- android:layout_height="40dip"
- android:text="BACK"
- android:id="@+id/btn_back"
- android:layout_gravity="right"
- android:layout_weight="1"
- />
- </LinearLayout>
- <ListView
- android:layout_width="fill_parent"
- android:layout_height="300dip"
- android:id="@+id/list_dir"
- />
- <Button
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:id="@+id/btn_ok"
- android:text="OK"/>
- </LinearLayout>
package hkp.dirchooser;
Dirchooserdialog代码 [java] view plain copy- importjava.io.File;
- importjava.util.ArrayList;
- importjava.util.List;
- importandroid.app.Dialog;
- importandroid.content.Context;
- importandroid.os.Bundle;
- importandroid.os.Environment;
- importandroid.os.Handler;
- importandroid.view.Gravity;
- importandroid.view.View;
- importandroid.widget.AdapterView;
- importandroid.widget.AdapterView.OnItemClickListener;
- importandroid.widget.ArrayAdapter;
- importandroid.widget.Button;
- importandroid.widget.EditText;
- importandroid.widget.LinearLayout;
- importandroid.widget.ListView;
- importandroid.widget.TextView;
- importandroid.widget.Toast;
- /**
- *@authorHKP
- *2011-6-17
- *
- */
- publicclassDirChooserDialogextendsDialogimplementsandroid.view.View.OnClickListener{
- privateListViewlist;
- ArrayAdapter<String>Adapter;
- ArrayList<String>arr=newArrayList<String>();
- Contextcontext;
- privateStringpath;
- privateTextViewtitle;
- privateEditTextet;
- privateButtonhome,back,ok;
- privateLinearLayouttitleView;
- privateinttype=1;
- privateString[]fileType=null;
- publicfinalstaticintTypeOpen=1;
- publicfinalstaticintTypeSave=2;
- /**
- *@paramcontext
- *@paramtype值为1表示创建打开目录类型的对话框,2为创建保存文件到目录类型的对话框
- *@paramfileType要过滤的文件类型,null表示只选择目录
- *@paramresultPath点OK按钮返回的结果,目录或者目录+文件名
- */
- publicDirChooserDialog(Contextcontext,inttype,String[]fileType,StringresultPath){
- super(context);
- //TODOAuto-generatedconstructorstub
- this.context=context;
- this.type=type;
- this.fileType=fileType;
- this.path=resultPath;
- }
- /*(non-Javadoc)
- *@seeandroid.app.Dialog#dismiss()
- */
- @Override
- publicvoiddismiss(){
- //TODOAuto-generatedmethodstub
- super.dismiss();
- }
- /*(non-Javadoc)
- *@seeandroid.app.Dialog#onCreate(android.os.Bundle)
- */
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- //TODOAuto-generatedmethodstub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.chooserdialog);
- path=getRootDir();
- arr=(ArrayList<String>)getDirs(path);
- Adapter=newArrayAdapter<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=newTextView(context);
- titleView.addView(title);
- title.setText(path);
- }elseif(type==TypeSave){
- et=newEditText(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
- Runnableadd=newRunnable(){
- @Override
- publicvoidrun(){
- //TODOAuto-generatedmethodstub
- arr.clear();
- //System.out.println("Runnablepath:"+path);
- //必须得用这种方法为arr赋值才能更新
- List<String>temp=getDirs(path);
- for(inti=0;i<temp.size();i++)
- arr.add(temp.get(i));
- Adapter.notifyDataSetChanged();
- }
- };
- privateOnItemClickListenerlvLis=newOnItemClickListener(){
- @Override
- publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,
- longarg3){
- Stringtemp=(String)arg0.getItemAtPosition(arg2);
- //System.out.println("OnItemClickpath1:"+path);
- if(temp.equals(".."))
- path=getSubDir(path);
- elseif(path.equals("/"))
- path=path+temp;
- else
- path=path+"/"+temp;
- //System.out.println("OnItemClickpath2"+path);
- if(type==TypeOpen)
- title.setText(path);
- Handlerhandler=newHandler();
- handler.post(add);
- }
- };
- privateList<String>getDirs(Stringipath){
- List<String>file=newArrayList<String>();
- //System.out.println("GetDirspath:"+ipath);
- File[]myFile=newFile(ipath).listFiles();
- if(myFile==null){
- file.add("..");
- }else
- for(Filef:myFile){
- //过滤目录
- if(f.isDirectory()){
- Stringtempf=f.toString();
- intpos=tempf.lastIndexOf("/");
- StringsubTemp=tempf.substring(pos+1,tempf.length());
- //StringsubTemp=tempf.substring(path.length(),tempf.length());
- file.add(subTemp);
- //System.out.println("filesindir:"+subTemp);
- }
- //过滤知道类型的文件
- if(f.isFile()&&fileType!=null){
- for(inti=0;i<fileType.length;i++){
- inttypeStrLen=fileType[i].length();
- StringfileName=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)+"Filesize:"+file.size());
- returnfile;
- }
- /*(non-Javadoc)
- *@seeandroid.view.View.OnClickListener#onClick(android.view.View)
- */
- @Override
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- if(v.getId()==home.getId()){
- path=getRootDir();
- if(type==TypeOpen)
- title.setText(path);
- Handlerhandler=newHandler();
- handler.post(add);
- }elseif(v.getId()==back.getId()){
- path=getSubDir(path);
- if(type==TypeOpen)
- title.setText(path);
- Handlerhandler=newHandler();
- handler.post(add);
- }elseif(v.getId()==ok.getId()){
- dismiss();
- if(type==TypeSave)
- path=path+"/"+et.getEditableText().toString()+".wf";
- Toast.makeText(context,path,Toast.LENGTH_SHORT).show();
- }
- }
- privateStringgetSDPath(){
- FilesdDir=null;
- booleansdCardExist=Environment.getExternalStorageState()
- .equals(android.os.Environment.MEDIA_MOUNTED);//判断sd卡是否存在
- if(sdCardExist)
- {
- sdDir=Environment.getExternalStorageDirectory();//获取根目录
- }
- if(sdDir==null){
- //Toast.makeText(context,"NoSDCardinside!",Toast.LENGTH_SHORT).show();
- returnnull;
- }
- returnsdDir.toString();
- }
- privateStringgetRootDir(){
- Stringroot="/";
- path=getSDPath();
- if(path==null)
- path="/";
- returnroot;
- }
- privateStringgetSubDir(Stringpath){
- Stringsubpath=null;
- intpos=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;
- returnsubpath;
- }
- }
package hkp.dirchooser;
Mainactivity代码 [java] view plain copy- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.view.View;
- importandroid.view.View.OnClickListener;
- importandroid.widget.Button;
- publicclassMainActivityextendsActivity{
- /**Calledwhentheactivityisfirstcreated.*/
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Buttonbtn=(Button)findViewById(R.id.btn_open);
- btn.setOnClickListener(newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- Stringpath=null;
- String[]fileType={"dst"};//要过滤的文件类型列表
- DirChooserDialogdlg=newDirChooserDialog(MainActivity.this,2,fileType,path);
- dlg.setTitle("Choosedstfiledir");
- dlg.show();
- }
- });
- }
- }
更多相关文章
- android SDCARD 读写操作
- 【Android】logcat日志信息过滤
- 在子线程中更新UI(后台服务)
- getExternalFilesDir()与getExternalStorageDirectory()区别
- Android敏感词过滤工具类
- ClassCastException: java.util.HashSet cannot be cast to java
- Android中泛型使用实例
- Android(安卓)SearchView 使用示例
- android获取屏幕尺寸、密度(判断手机屏幕类型)