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数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk