非常简单的Android打开和保存对话框功能
在Android上没有标准的打开和另存为对话框。在本代码中,我将详细描述一个非常简单的打开和保存对话框实现过程,对于Android初学者来说非常有用,对话框都是全屏活动的。
主要功能:
1、访问任何目录的SD卡
2、递归访问文件夹
3、单一文件选择
4、通过按硬件后退按钮升级
5、确认文件选择OK按钮
activity_open_file.xml
<LinearLayoutxmlns:android="<ahref="http://schemas.android.com/apk/res/android""rel="nofollow"target="_blank">http://schemas.android.com/apk/res/android"</a> xmlns:tools="<ahref="http://schemas.android.com/tools""rel="nofollow"target="_blank">http://schemas.android.com/tools"</a> android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/LvList" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"> </ListView> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/BtnOK" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="OK"/> <Button android:id="@+id/BtnCancel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Cancel"/> </LinearLayout> </LinearLayout>
OpenFileActivity.java
packagecom.example.androidfiledialogs; importjava.io.File; importjava.util.ArrayList; importjava.util.Collections; importjava.util.Comparator; importandroid.app.Activity; importandroid.content.Intent; importandroid.os.Bundle; importandroid.os.Environment; importandroid.view.Menu; importandroid.view.MenuItem; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.AdapterView; importandroid.widget.AdapterView.OnItemClickListener; importandroid.widget.AdapterView.OnItemLongClickListener; importandroid.widget.AdapterView.OnItemSelectedListener; importandroid.widget.ArrayAdapter; importandroid.widget.Button; importandroid.widget.ListView; importandroid.widget.Spinner; importandroid.widget.Toast; publicclassOpenFileActivityextendsActivity implementsOnClickListener,OnItemClickListener{ ListViewLvList; ArrayList<String>listItems=newArrayList<String>(); ArrayAdapter<String>adapter; ButtonBtnOK; ButtonBtnCancel; StringcurrentPath=null; StringselectedFilePath=null;/*Fullpath,i.e./mnt/sdcard/folder/file.txt*/ StringselectedFileName=null;/*FileNameOnly,i.efile.txt*/ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_open_file); try{ /*InitializingWidgets*/ LvList=(ListView)findViewById(R.id.LvList); BtnOK=(Button)findViewById(R.id.BtnOK); BtnCancel=(Button)findViewById(R.id.BtnCancel); /*InitializingEventHandlers*/ LvList.setOnItemClickListener(this); BtnOK.setOnClickListener(this); BtnCancel.setOnClickListener(this); // setCurrentPath(Environment.getExternalStorageDirectory().getAbsolutePath()+"/"); }catch(Exceptionex){ Toast.makeText(this, "ErrorinOpenFileActivity.onCreate:"+ex.getMessage(), Toast.LENGTH_SHORT).show(); } } voidsetCurrentPath(Stringpath){ ArrayList<String>folders=newArrayList<String>(); ArrayList<String>files=newArrayList<String>(); currentPath=path; FileallEntries=newFile(path).listFiles(); for(inti=0;i<allEntries.length;i++){ if(allEntries.isDirectory()){ folders.add(allEntries.getName()); }elseif(allEntries.isFile()){ files.add(allEntries.getName()); } } Collections.sort(folders,newComparator<String>(){ @Override publicintcompare(Strings1,Strings2){ returns1.compareToIgnoreCase(s2); } }); Collections.sort(files,newComparator<String>(){ @Override publicintcompare(Strings1,Strings2){ returns1.compareToIgnoreCase(s2); } }); listItems.clear(); for(inti=0;i<folders.size();i++){ listItems.add(folders.get(i)+"/"); } for(inti=0;i<files.size();i++){ listItems.add(files.get(i)); } adapter=newArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems); adapter.notifyDataSetChanged(); LvList.setAdapter(adapter); } @Override publicvoidonBackPressed() { if(!currentPath.equals(Environment.getExternalStorageDirectory().getAbsolutePath()+"/")){ setCurrentPath(newFile(currentPath).getParent()+"/"); }else{ super.onBackPressed(); } } @Override publicvoidonClick(Viewv){ Intentintent; switch(v.getId()){ caseR.id.BtnOK: intent=newIntent(); intent.putExtra("fileName",selectedFilePath); intent.putExtra("shortFileName",selectedFileName); setResult(RESULT_OK,intent); this.finish(); break; caseR.id.BtnCancel: intent=newIntent(); intent.putExtra("fileName",""); intent.putExtra("shortFileName",""); setResult(RESULT_CANCELED,intent); this.finish(); break; } } @Override publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition, longid){ StringentryName=(String)parent.getItemAtPosition(position); if(entryName.endsWith("/")){ setCurrentPath(currentPath+entryName); }else{ selectedFilePath=currentPath+entryName; selectedFileName=entryName; this.setTitle(this.getResources().getString(R.string.title_activity_open_file) +"<span>[</span>"+entryName+"]"); } } }
activity_save_file.xml
<LinearLayoutxmlns:android="<ahref="http://schemas.android.com/apk/res/android""rel="nofollow"target="_blank">http://schemas.android.com/apk/res/android"</a> xmlns:tools="<ahref="http://schemas.android.com/tools""rel="nofollow"target="_blank">http://schemas.android.com/tools"</a> android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/SFA_LvList" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"> </ListView> <EditText android:id="@+id/SFA_TxtFileName" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:text="file.txt"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/SFA_BtnOK" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="OK"/> <Button android:id="@+id/SFA_BtnCancel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Cancel"/> </LinearLayout> </LinearLayout> </LinearLayout>
SaveFileActivity.java
packagecom.example.androidfiledialogs; importjava.io.File; importjava.util.ArrayList; importjava.util.Collections; importjava.util.Comparator; importandroid.app.Activity; importandroid.content.Intent; importandroid.os.Bundle; importandroid.os.Environment; importandroid.view.Menu; importandroid.view.MenuItem; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.AdapterView; importandroid.widget.ArrayAdapter; importandroid.widget.Button; importandroid.widget.EditText; importandroid.widget.ListView; importandroid.widget.Toast; importandroid.widget.AdapterView.OnItemClickListener; publicclassSaveFileActivityextendsActivity implementsOnClickListener,OnItemClickListener{ ListViewLvList; ArrayList<String>listItems=newArrayList<String>(); ArrayAdapter<String>adapter; EditTextTxtFileName; ButtonBtnOK; ButtonBtnCancel; StringcurrentPath=null; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_save_file); try{ /*InitializingWidgets*/ LvList=(ListView)findViewById(R.id.SFA_LvList); TxtFileName=(EditText)findViewById(R.id.SFA_TxtFileName); BtnOK=(Button)findViewById(R.id.SFA_BtnOK); BtnCancel=(Button)findViewById(R.id.SFA_BtnCancel); /*InitializingEventHandlers*/ LvList.setOnItemClickListener(this); BtnOK.setOnClickListener(this); BtnCancel.setOnClickListener(this); // setCurrentPath(Environment.getExternalStorageDirectory().getAbsolutePath()+"/"); }catch(Exceptionex){ Toast.makeText(this, "ErrorinSaveFileActivity.onCreate:"+ex.getMessage(), Toast.LENGTH_SHORT).show(); } } voidsetCurrentPath(Stringpath){ ArrayList<String>folders=newArrayList<String>(); ArrayList<String>files=newArrayList<String>(); currentPath=path; FileallEntries=newFile(path).listFiles(); for(inti=0;i<allEntries.length;i++){ if(allEntries.isDirectory()){ folders.add(allEntries.getName()); }elseif(allEntries.isFile()){ files.add(allEntries.getName()); } } Collections.sort(folders,newComparator<String>(){ @Override publicintcompare(Strings1,Strings2){ returns1.compareToIgnoreCase(s2); } }); Collections.sort(files,newComparator<String>(){ @Override publicintcompare(Strings1,Strings2){ returns1.compareToIgnoreCase(s2); } }); listItems.clear(); for(inti=0;i<folders.size();i++){ listItems.add(folders.get(i)+"/"); } for(inti=0;i<files.size();i++){ listItems.add(files.get(i)); } adapter=newArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems); adapter.notifyDataSetChanged(); LvList.setAdapter(adapter); } @Override publicvoidonBackPressed() { if(!currentPath.equals(Environment.getExternalStorageDirectory().getAbsolutePath()+"/")){ setCurrentPath(newFile(currentPath).getParent()+"/"); }else{ super.onBackPressed(); } } @Override publicvoidonClick(Viewv){ Intentintent; switch(v.getId()){ caseR.id.SFA_BtnOK: intent=newIntent(); intent.putExtra("fileName",currentPath+TxtFileName.getText().toString()); intent.putExtra("shortFileName",TxtFileName.getText().toString()); setResult(RESULT_OK,intent); this.finish(); break; caseR.id.SFA_BtnCancel: intent=newIntent(); intent.putExtra("fileName",""); intent.putExtra("shortFileName",""); setResult(RESULT_CANCELED,intent); this.finish(); break; } } @Override publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition, longid){ StringentryName=(String)parent.getItemAtPosition(position); if(entryName.endsWith("/")){ setCurrentPath(currentPath+entryName); }else{ this.setTitle(this.getResources().getString(R.string.title_activity_open_file) +"<span>[</span>"+entryName+"]"); TxtFileName.setText(entryName); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。