首页 > 系统 > Android > 正文

非常简单的Android打开和保存对话框功能

2019-12-12 05:58:12
字体:
来源:转载
供稿:网友

在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);    }  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表