Android文件目录选择器(可自行扩展)

2024-04-29 00:32

本文主要是介绍Android文件目录选择器(可自行扩展),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇中写了文件下载的博文,其中说道要用户选择文件的保存目录,在此展示:

首先看FileBrowserActivity.java

[java] view plaincopy
  1. package com.knowhow.android.client;  
  2.   
  3. import java.io.File;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7. import android.app.AlertDialog;  
  8. import android.content.DialogInterface;  
  9. import android.content.Intent;  
  10. import android.graphics.Color;  
  11. import android.os.Bundle;  
  12. import android.view.View;  
  13. import android.view.View.OnClickListener;  
  14. import android.widget.AdapterView;  
  15. import android.widget.AdapterView.OnItemClickListener;  
  16. import android.widget.Button;  
  17. import android.widget.ImageView;  
  18. import android.widget.LinearLayout;  
  19. import android.widget.ListView;  
  20. import android.widget.TextView;  
  21. import android.widget.Toast;  
  22.   
  23. import com.knowhow.android.client.ui.adapter.FileAdapter;  
  24.   
  25. public class FileBrowserActivity extends KHActivity {  
  26.   
  27.     private List<String> items=null;  
  28.     private List<String> paths=null;  
  29.     private String rootPath="/sdcard/";  
  30.     private TextView mPath;  
  31.     private ListView list;    
  32.     private FileAdapter m_FileAdapter;  
  33.     private void getFileDir(String filePath){  
  34.   
  35.         File f=new File(filePath);   
  36.         if(f.exists() && f.canWrite()){  
  37.             mPath.setText(filePath);  
  38.             items=new ArrayList<String>();  
  39.             paths=new ArrayList<String>();  
  40.             File[] files=f.listFiles();  
  41.             if(!filePath.equals(rootPath)){  
  42.                 items.add("goroot");  
  43.                 paths.add(rootPath);  
  44.                 items.add("goparent");  
  45.                 paths.add(f.getParent());  
  46.             }  
  47.             for(int i=0;i<files.length;i++){  
  48.                 File file=files[i];  
  49.                 if(file.isDirectory()){  
  50.                     items.add(file.getName());  
  51.                     paths.add(file.getPath());  
  52.                 }  
  53.             }  
  54.             m_FileAdapter = new FileAdapter(this,items,paths);  
  55.             list.setAdapter(m_FileAdapter);  
  56.             list.setOnItemClickListener(new OnItemClickListener(){  
  57.                   
  58.                 @Override  
  59.                 public void onItemClick(AdapterView<?> parent, View view,int position, long id) {  
  60.                       
  61.                     if(items.get(position).toString().equals("goparent")){  
  62.                         getFileDir(paths.get(position));  
  63.                     }else if(items.get(position).toString().equals("goroot")){  
  64.                         getFileDir(paths.get(position));  
  65.                         return;  
  66.                     }else{  
  67.                         File file=new File(paths.get(position));  
  68.                         if(file.canWrite()){  
  69.                             if (file.isDirectory()){  
  70.                                 getFileDir(paths.get(position));  
  71.                             }  
  72.                         }else{  
  73.                             LinearLayout lay = new LinearLayout(FileBrowserActivity.this);  
  74.                             lay.setOrientation(LinearLayout.HORIZONTAL);  
  75.                             ImageView image = new ImageView(FileBrowserActivity.this);  
  76.                             TextView text = new TextView(FileBrowserActivity.this);  
  77.                             text.setTextColor(Color.RED);  
  78.                             text.setTextSize(20);  
  79.                             text.setText("很抱歉您的权限不足!");  
  80.                             Toast toast = Toast.makeText(FileBrowserActivity.this, text.getText().toString(), Toast.LENGTH_LONG);  
  81.                             image.setImageResource(android.R.drawable.stat_sys_warning);  
  82.                             lay.addView(image);  
  83.                             lay.addView(text);  
  84.                             toast.setView(lay);  
  85.                             toast.show();  
  86.                         }  
  87.                     }  
  88.                 }  
  89.             });  
  90.         }else{  
  91.             LinearLayout lay = new LinearLayout(FileBrowserActivity.this);  
  92.             lay.setOrientation(LinearLayout.HORIZONTAL);  
  93.             ImageView image = new ImageView(FileBrowserActivity.this);  
  94.             TextView text = new TextView(FileBrowserActivity.this);  
  95.             text.setTextColor(Color.RED);  
  96.             text.setTextSize(20);  
  97.             text.setText("无SD卡,无法完成下载!");  
  98.             Toast toast = Toast.makeText(FileBrowserActivity.this, text.getText().toString(), Toast.LENGTH_LONG);  
  99.             image.setImageResource(android.R.drawable.stat_sys_warning);  
  100.             lay.addView(image);  
  101.             lay.addView(text);  
  102.             toast.setView(lay);  
  103.             toast.show();  
  104.             this.finish();  
  105.         }  
  106.     }  
  107.   
  108.     @Override  
  109.     protected void onCreate(Bundle savedInstanceState) {  
  110.         super.onCreate(savedInstanceState);  
  111.         this.setContentView(R.layout.filelist);  
  112.         mPath = (TextView)this.findViewById(R.id.mPath);  
  113.         list = (ListView)this.findViewById(R.id.filelist);  
  114.         getFileDir(rootPath);  
  115.         mPath.setTextColor(this.getResources().getColor(R.color.text_color));  
  116.         this.setTitle("请选择保存目录:");  
  117.         Button ok = (Button)this.findViewById(R.id.fileok);  
  118.         ok.setPadding(0505);  
  119.         ok.setOnClickListener(new OnClickListener(){  
  120.             @Override  
  121.             public void onClick(View v) {  
  122.                 /*if(mPath.getText().toString().equals(rootPath)){ 
  123.                     LinearLayout lay = new LinearLayout(FileBrowserActivity.this); 
  124.                     lay.setOrientation(LinearLayout.HORIZONTAL); 
  125.                     ImageView image = new ImageView(FileBrowserActivity.this); 
  126.                     TextView text = new TextView(FileBrowserActivity.this); 
  127.                     text.setTextColor(FileBrowserActivity.this.getResources().getColor(R.color.text_color)); 
  128.                     text.setTextSize(16); 
  129.                     text.setText("很抱歉您的权限不足!"); 
  130.                     Toast toast = Toast.makeText(FileBrowserActivity.this, text.getText().toString(), Toast.LENGTH_SHORT); 
  131.                     image.setImageResource(android.R.drawable.stat_sys_warning); 
  132.                     lay.addView(image); 
  133.                     lay.addView(text); 
  134.                     toast.setView(lay); 
  135.                     toast.show(); 
  136.                 }else{*/  
  137.                     Intent i = new Intent();  
  138.                     Bundle b = new Bundle();    
  139.                     b.putString("savePath", mPath.getText().toString());    
  140.                     b.putString("url", FileBrowserActivity.this.getIntent().getStringExtra("url"));    
  141.                     b.putString("fileName", FileBrowserActivity.this.getIntent().getStringExtra("fileName"));    
  142.                     i.putExtras(b);  
  143.                     FileBrowserActivity.this.setResult(RESULT_OK, i);  
  144.                     FileBrowserActivity.this.finish();  
  145.                 //}  
  146.                   
  147.             }  
  148.         });  
  149.         Button cancel = (Button)this.findViewById(R.id.filecancel);  
  150.         cancel.setPadding(0505);  
  151.         cancel.setOnClickListener(new OnClickListener(){  
  152.             @Override  
  153.             public void onClick(View v) {  
  154.                 FileBrowserActivity.this.finish();  
  155.             }  
  156.         });  
  157.     }  
  158. }  
接下来看listview的layout文件以及FileAdapter.java

filelist.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent" android:layout_height="fill_parent"  
  4.     android:orientation="vertical" android:background="@drawable/white">  
  5.     <LinearLayout android:layout_width="fill_parent" android:gravity="center"  
  6.         android:layout_height="wrap_content" android:orientation="horizontal">  
  7.         <Button android:layout_weight="1.0" android:textColor="@color/button_text_color"  
  8.             android:textSize="16dip" android:background="@drawable/bg_alibuybutton_states"  
  9.             android:layout_height="wrap_content" android:layout_width="wrap_content"  
  10.             android:id="@+id/fileok"  
  11.             android:text="确定" />  
  12.         <Button android:layout_marginLeft="10dip"  
  13.             android:layout_weight="1.0" android:textColor="@color/button_text_color"  
  14.             android:textSize="16dip" android:background="@drawable/bg_alibuybutton_states"  
  15.             android:layout_height="wrap_content" android:layout_width="wrap_content"  
  16.             android:id="@+id/filecancel"   
  17.             android:text="取消"></Button>  
  18.     </LinearLayout>  
  19.     <TextView android:id="@+id/mPath" android:layout_width="wrap_content"  
  20.         android:layout_height="wrap_content" android:padding="5px"  
  21.         android:textSize="18sp" android:textColor="@drawable/blue" />  
  22.     <ListView android:id="@+id/filelist" android:layout_width="wrap_content"  
  23.         android:cacheColorHint="#00000000"  
  24.         android:layout_height="wrap_content" />  
  25. </LinearLayout>  

file_row.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout android:id="@+id/file_items"  
  3.     android:layout_width="fill_parent"   
  4.     xmlns:android="http://schemas.android.com/apk/res/android"  
  5.     android:layout_height="wrap_content"   
  6.     android:paddingBottom="4dip"  
  7.     android:paddingLeft="12dip"   
  8.     android:paddingRight="12dip">  
  9.   <ImageView android:id="@+id/fileicon"  
  10.     android:layout_height="wrap_content"  
  11.     android:textSize="26dip"  
  12.     android:layout_alignParentLeft="true"  
  13.     android:layout_width="wrap_content"  
  14.     android:layout_below="@+id/file_items"/>  
  15.   <TextView android:id="@+id/filetext"  
  16.     android:layout_gravity="center_vertical"  
  17.     android:layout_width="fill_parent"  
  18.     android:layout_toRightOf="@id/fileicon"  
  19.     android:paddingLeft="20dip"  
  20.     android:layout_height="wrap_content"/>  
  21.   <CheckBox android:id="@+id/file_check"   
  22.         style="?android:attr/starStyle"  
  23.         android:layout_height="wrap_content"   
  24.         android:layout_width="wrap_content"   
  25.         android:layout_alignParentRight="true"  
  26.         android:focusable="false"     
  27.         android:focusableInTouchMode="false"     
  28.         android:clickable="false"  
  29.         android:layout_below="@+id/file_items"/>  
  30. </RelativeLayout>  

FileAdapter.java

[java] view plaincopy
  1. package com.knowhow.android.client.ui.adapter;  
  2.   
  3. import java.io.File;  
  4. import java.util.ArrayList;  
  5. import java.util.HashMap;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. import android.content.Context;  
  10. import android.graphics.Bitmap;  
  11. import android.graphics.BitmapFactory;  
  12. import android.view.LayoutInflater;  
  13. import android.view.View;  
  14. import android.view.ViewGroup;  
  15. import android.widget.BaseAdapter;  
  16. import android.widget.CheckBox;  
  17. import android.widget.ImageView;  
  18. import android.widget.TextView;  
  19.   
  20. import com.knowhow.android.client.R;  
  21.   
  22. public class FileAdapter extends BaseAdapter{  
  23.   
  24.     private LayoutInflater mInflater;  
  25.     private Bitmap mIcon1;  
  26.     private Bitmap mIcon2;  
  27.     private Bitmap mIcon3;  
  28.     private Bitmap mIcon4;  
  29.     private List<String> items;  
  30.     private List<String> paths;  
  31.     private Map<Integer, Boolean> isSelected;  
  32.     private Map<Integer, Integer> isVisibility;  
  33.     public Map<Integer, Integer> getIsVisibility() {  
  34.         return isVisibility;  
  35.     }  
  36.   
  37.     private List<ViewHolder> VHs = new ArrayList<ViewHolder>();  
  38.     private Context context;  
  39.   
  40.     public Map<Integer, Boolean> getIsSelected() {  
  41.         return isSelected;  
  42.     }  
  43.   
  44.     public void setIsSelected(Map<Integer, Boolean> isSelected) {  
  45.         this.isSelected = isSelected;  
  46.     }  
  47.   
  48.     public FileAdapter(Context context,List<String> it,List<String> pa){  
  49.           
  50.         this.context = context;  
  51.         mInflater = LayoutInflater.from(context);  
  52.         if( it != null && it.size() > 0){  
  53.             isSelected = new HashMap<Integer, Boolean>();  
  54.             isVisibility = new HashMap<Integer, Integer>();  
  55.             for (int i = 0; i < it.size(); i++) {      
  56.                 isSelected.put(i, false);  
  57.                 isVisibility.put(i, View.GONE);  
  58.             }  
  59.         }  
  60.         items = it;  
  61.         paths = pa;  
  62.         mIcon1 = BitmapFactory.decodeResource(context.getResources(),  
  63.                 R.drawable.backroot);  
  64.         mIcon2 = BitmapFactory.decodeResource(context.getResources(),  
  65.                 R.drawable.backparent);  
  66.         mIcon3 = BitmapFactory.decodeResource(context.getResources(),  
  67.                 R.drawable.folder);  
  68.         mIcon4 = BitmapFactory.decodeResource(context.getResources(),  
  69.                 R.drawable.doc);  
  70.     }  
  71.   
  72.     @Override  
  73.     public int getCount(){  
  74.         return items.size();  
  75.     }  
  76.   
  77.     @Override  
  78.     public Object getItem(int position){  
  79.         return items.get(position);  
  80.     }  
  81.   
  82.     @Override  
  83.     public long getItemId(int position){  
  84.         return position;  
  85.     }  
  86.   
  87.     @Override  
  88.     public View getView(int position,View convertView,ViewGroup parent){  
  89.         ViewHolder holder;  
  90.   
  91.         if(convertView == null){  
  92.             convertView = mInflater.inflate(R.layout.file_row, null);  
  93.             holder = new ViewHolder();  
  94.             VHs.add(holder);  
  95.             holder.text = (TextView) convertView.findViewById(R.id.filetext);  
  96.             holder.text.setTextColor(context.getResources().getColor(R.color.text_color));  
  97.             holder.icon = (ImageView) convertView.findViewById(R.id.fileicon);  
  98.             holder.cBox = (CheckBox) convertView.findViewById(R.id.file_check);  
  99.             convertView.setTag(holder);  
  100.         }else{  
  101.             holder = (ViewHolder) convertView.getTag();  
  102.         }  
  103.         File f=new File(paths.get(position).toString());  
  104.         if(items.get(position).toString().equals("goroot")){  
  105.             holder.text.setText("返回根目录");  
  106.             holder.icon.setImageBitmap(mIcon1);  
  107.             holder.cBox.setChecked(isSelected.get(position));  
  108.             holder.cBox.setVisibility(isVisibility.get(position));  
  109.         }else if(items.get(position).toString().equals("goparent")){  
  110.             holder.text.setText("返回上一级");  
  111.             holder.icon.setImageBitmap(mIcon2);  
  112.             holder.cBox.setChecked(isSelected.get(position));  
  113.             holder.cBox.setVisibility(isVisibility.get(position));  
  114.         }else{  
  115.             holder.text.setText(f.getName());  
  116.             if(f.isDirectory()){  
  117.                 holder.icon.setImageBitmap(mIcon3);  
  118.                 holder.cBox.setChecked(isSelected.get(position));  
  119.                 holder.cBox.setVisibility(isVisibility.get(position));  
  120.             }else{  
  121.                 holder.icon.setImageBitmap(mIcon4);  
  122.                 holder.cBox.setChecked(isSelected.get(position));  
  123.                 holder.cBox.setVisibility(isVisibility.get(position));  
  124.             }  
  125.         }  
  126.         return convertView;  
  127.     }  
  128.   
  129.     public List<ViewHolder> getVHs() {  
  130.         return VHs;  
  131.     }  
  132.   
  133.     public final class ViewHolder  
  134.     {  
  135.         public TextView text;  
  136.         public ImageView icon;  
  137.         public CheckBox cBox;  
  138.     }  
  139. }  

以上就是所有代码,文件夹以及文件的图片可以自己找,因为我不能上传图片所以,这2个文件以及效果图我会后续补上。(几天之后)

亲们可以根据自己的需要扩展 文件选择(多选或者单选都可以)如果需要我帮忙别客气。

原文地址:点击打开链接

这篇关于Android文件目录选择器(可自行扩展)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/944663

相关文章

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE