Android文件浏览器
来源:互联网 发布:淘宝网什么最好卖 编辑:程序博客网 时间:2024/06/05 21:19
1.接口
package com.gst.user.application.tools;/** * Created by user on 12/22/15. */public interface OnFileBrowserListener { public void onFileItemClick(String fileName); public void onDirItemClick(String path);}2.
package com.gst.user.application.tools;import java.io.File;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Stack;import android.content.Context;import android.graphics.Color;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;public class FileBrowser extends ListView implements android.widget.AdapterView.OnItemClickListener{ private final String namespace = "http://com.gst.user.application.tools"; private String sdcardDirectory; private List<File> fileList = new ArrayList<File>(); private Stack<String> dirStack = new Stack<String>(); private FileListAdapter fileListAdapter; private OnFileBrowserListener onFileBrowserListener; private int folderImageResId; private int otherFileImageResId; private Map<String, Integer> fileImageResIdMap = new HashMap<String, Integer>(); private boolean onlyFolder = false; public FileBrowser(Context context, AttributeSet attrs) { super(context, attrs); sdcardDirectory = android.os.Environment.getExternalStorageDirectory() .toString(); setOnItemClickListener(this); setBackgroundColor(Color.WHITE); folderImageResId = attrs.getAttributeResourceValue(namespace, "folderImage", 0); otherFileImageResId = attrs.getAttributeResourceValue(namespace, "otherFileImage", 0); onlyFolder = attrs.getAttributeBooleanValue(namespace, "onlyFolder", false); int index = 1; while (true) { String extName = attrs.getAttributeValue(namespace, "extName" + index); int fileImageResId = attrs.getAttributeResourceValue(namespace, "fileImage" + index, 0); if ("".equals(extName) || extName == null || fileImageResId == 0) { break; } fileImageResIdMap.put(extName, fileImageResId); index++; } dirStack.push(sdcardDirectory); addFiles(); fileListAdapter = new FileListAdapter(getContext()); setAdapter(fileListAdapter); } private void addFiles() { fileList.clear(); String currentPath = getCurrentPath(); File[] files = new File(currentPath).listFiles(); if (dirStack.size() > 1) fileList.add(null); for (File file : files) { if (onlyFolder) { if (file.isDirectory()) fileList.add(file); } else { fileList.add(file); } } } private String getCurrentPath() { String path = ""; for (String dir : dirStack) { path += dir + "/"; } path = path.substring(0, path.length() - 1); return path; } private String getExtName(String filename) { int position = filename.lastIndexOf("."); if (position >= 0) return filename.substring(position + 1); else return ""; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (fileList.get(position) == null) { dirStack.pop(); addFiles(); fileListAdapter.notifyDataSetChanged(); if (onFileBrowserListener != null) { onFileBrowserListener.onDirItemClick(getCurrentPath()); } } else if (fileList.get(position).isDirectory()) { dirStack.push(fileList.get(position).getName()); addFiles(); fileListAdapter.notifyDataSetChanged(); if (onFileBrowserListener != null) { onFileBrowserListener.onDirItemClick(getCurrentPath()); } } else { if (onFileBrowserListener != null) { String filename = getCurrentPath() + "/" + fileList.get(position).getName(); onFileBrowserListener.onFileItemClick(filename); } } } private class FileListAdapter extends BaseAdapter { private Context context; public FileListAdapter(Context context) { this.context = context; } @Override public int getCount() { return fileList.size(); } @Override public Object getItem(int position) { return fileList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { LinearLayout fileLayout = new LinearLayout(context); fileLayout.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); fileLayout.setOrientation(LinearLayout.HORIZONTAL); fileLayout.setPadding(5, 10, 0, 10); ImageView ivFile = new ImageView(context); ivFile.setLayoutParams(new LayoutParams(48, 48)); TextView tvFile = new TextView(context); tvFile.setTextColor(android.graphics.Color.WHITE); tvFile.setTextAppearance(context, android.R.style.TextAppearance_Large); tvFile.setPadding(5, 5, 0, 0); if (fileList.get(position) == null) { if (folderImageResId > 0) ivFile.setImageResource(folderImageResId); tvFile.setText(". ."); } else if (fileList.get(position).isDirectory()) { if (folderImageResId > 0) ivFile.setImageResource(folderImageResId); tvFile.setText(fileList.get(position).getName()); } else { tvFile.setText(fileList.get(position).getName()); Integer resId = fileImageResIdMap.get(getExtName(fileList.get( position).getName())); int fileImageResId = 0; if (resId != null) { if (resId > 0) { fileImageResId = resId; } } if (fileImageResId > 0) ivFile.setImageResource(fileImageResId); else if (otherFileImageResId > 0) ivFile.setImageResource(otherFileImageResId); } tvFile.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); fileLayout.addView(ivFile); fileLayout.addView(tvFile); return fileLayout; } } public void setOnFileBrowserListener(OnFileBrowserListener listener) { this.onFileBrowserListener = listener; }}
0 0
- Android文件浏览器
- android文件浏览器
- 自制Android 文件浏览器
- Android之文件浏览器
- android 文件浏览器实现
- Android文件浏览器
- Android 编写文件浏览器
- Android文件浏览器的开发
- Android SD卡文件浏览器
- Android开发之文件浏览器
- Android开发之文件浏览器
- Android简单文件浏览器源代码
- Android SD卡文件浏览器
- android版自定义文件浏览器
- Android SD卡文件浏览器
- 【Android软件】ES文件浏览器:Android资源管理器
- Android浏览器清单文件关键配置和浏览器的调用
- Android浏览器如何打开本地html文件
- 单例模式
- Deep Learning(深度学习)
- TextView实现红点效果
- JavaScript 的self 和 this 使用小结
- HTTP错误大全
- Android文件浏览器
- FHS(Filesystem Hierarchy Standard)文件系统目录标准
- 【构】使用行为树(Behavior Tree)实现游戏AI
- 每日一vim(9)缩进
- 做一个怎样的子女
- 常用网址
- 一切都会过去,而逝去的终将变的美好
- leetcode--Triangle
- UICollectionView基础