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

相关文章

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后