在Android上没有标准的打开和另存为对话框。在本代码中,我将详细描述一个非常简单的打开和保存对话框实现过程,对于Android初学者来说非常有用,对话框都是全屏活动的。
主要功能:
1、访问任何目录的SD卡
2、递归访问文件夹
3、单一文件选择
4、通过按硬件后退按钮升级
5、确认文件选择OK按钮
activity_open_file.xml
<LinearLayout xmlns:android=\"<a href=\"http://schemas.android.com/apk/res/android\"\" rel=\"nofollow\" target=\"_blank\">http://schemas.android.com/apk/res/android\"</a> xmlns:tools=\"<a href=\"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
package com.example.androidfiledialogs; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.Spinner; import android.widget.Toast; public class OpenFileActivity extends Activity implements OnClickListener, OnItemClickListener { ListView LvList; ArrayList<String> listItems = new ArrayList<String>(); ArrayAdapter<String> adapter; Button BtnOK; Button BtnCancel; String currentPath = null; String selectedFilePath = null; /* Full path, i.e. /mnt/sdcard/folder/file.txt */ String selectedFileName = null; /* File Name Only, i.e file.txt */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_open_file); try { /* Initializing Widgets */ LvList = (ListView) findViewById(R.id.LvList); BtnOK = (Button) findViewById(R.id.BtnOK); BtnCancel = (Button) findViewById(R.id.BtnCancel); /* Initializing Event Handlers */ LvList.setOnItemClickListener(this); BtnOK.setOnClickListener(this); BtnCancel.setOnClickListener(this); // setCurrentPath(Environment.getExternalStorageDirectory().getAbsolutePath() + \"/\"); } catch (Exception ex) { Toast.makeText(this, \"Error in OpenFileActivity.onCreate: \" + ex.getMessage(), Toast.LENGTH_SHORT).show(); } } void setCurrentPath(String path) { ArrayList<String> folders = new ArrayList<String>(); ArrayList<String> files = new ArrayList<String>(); currentPath = path; File allEntries = new File(path).listFiles(); for (int i = 0; i < allEntries.length; i++) { if (allEntries.isDirectory()) { folders.add(allEntries.getName()); } else if (allEntries.isFile()) { files.add(allEntries.getName()); } } Collections.sort(folders, new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } }); Collections.sort(files, new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } }); listItems.clear(); for (int i = 0; i < folders.size(); i++) { listItems.add(folders.get(i) + \"/\"); } for (int i = 0; i < files.size(); i++) { listItems.add(files.get(i)); } adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems); adapter.notifyDataSetChanged(); LvList.setAdapter(adapter); } @Override public void onBackPressed() { if (!currentPath.equals(Environment.getExternalStorageDirectory().getAbsolutePath() + \"/\")) { setCurrentPath(new File(currentPath).getParent() + \"/\"); } else { super.onBackPressed(); } } @Override public void onClick(View v) { Intent intent; switch (v.getId()) { case R.id.BtnOK: intent = new Intent(); intent.putExtra(\"fileName\", selectedFilePath); intent.putExtra(\"shortFileName\", selectedFileName); setResult(RESULT_OK, intent); this.finish(); break; case R.id.BtnCancel: intent = new Intent(); intent.putExtra(\"fileName\", \"\"); intent.putExtra(\"shortFileName\", \"\"); setResult(RESULT_CANCELED, intent); this.finish(); break; } } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String entryName = (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
<LinearLayout xmlns:android=\"<a href=\"http://schemas.android.com/apk/res/android\"\" rel=\"nofollow\" target=\"_blank\">http://schemas.android.com/apk/res/android\"</a> xmlns:tools=\"<a href=\"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
package com.example.androidfiledialogs; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; public class SaveFileActivity extends Activity implements OnClickListener, OnItemClickListener { ListView LvList; ArrayList<String> listItems = new ArrayList<String>(); ArrayAdapter<String> adapter; EditText TxtFileName; Button BtnOK; Button BtnCancel; String currentPath = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_save_file); try { /* Initializing Widgets */ 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); /* Initializing Event Handlers */ LvList.setOnItemClickListener(this); BtnOK.setOnClickListener(this); BtnCancel.setOnClickListener(this); // setCurrentPath(Environment.getExternalStorageDirectory().getAbsolutePath() + \"/\"); } catch (Exception ex) { Toast.makeText(this, \"Error in SaveFileActivity.onCreate: \" + ex.getMessage(), Toast.LENGTH_SHORT).show(); } } void setCurrentPath(String path) { ArrayList<String> folders = new ArrayList<String>(); ArrayList<String> files = new ArrayList<String>(); currentPath = path; File allEntries = new File(path).listFiles(); for (int i = 0; i < allEntries.length; i++) { if (allEntries.isDirectory()) { folders.add(allEntries.getName()); } else if (allEntries.isFile()) { files.add(allEntries.getName()); } } Collections.sort(folders, new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } }); Collections.sort(files, new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } }); listItems.clear(); for (int i = 0; i < folders.size(); i++) { listItems.add(folders.get(i) + \"/\"); } for (int i = 0; i < files.size(); i++) { listItems.add(files.get(i)); } adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems); adapter.notifyDataSetChanged(); LvList.setAdapter(adapter); } @Override public void onBackPressed() { if (!currentPath.equals(Environment.getExternalStorageDirectory().getAbsolutePath() + \"/\")) { setCurrentPath(new File(currentPath).getParent() + \"/\"); } else { super.onBackPressed(); } } @Override public void onClick(View v) { Intent intent; switch (v.getId()) { case R.id.SFA_BtnOK: intent = new Intent(); intent.putExtra(\"fileName\", currentPath + TxtFileName.getText().toString()); intent.putExtra(\"shortFileName\", TxtFileName.getText().toString()); setResult(RESULT_OK, intent); this.finish(); break; case R.id.SFA_BtnCancel: intent = new Intent(); intent.putExtra(\"fileName\", \"\"); intent.putExtra(\"shortFileName\", \"\"); setResult(RESULT_CANCELED, intent); this.finish(); break; } } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String entryName = (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); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持phpstudy。
本文地址:https://www.stayed.cn/item/4402
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我