[Android] 软件中选择文件夹功能
在用户配置的地方就有可能需要用户选择文件夹的功能,自己做了一个小的实例。
发上来给自己做一个简单的记录!
先上功能截图:
主要代码献上(在这里不再累赘的写主活动的内容,只讲解实现部分):
首先是XML的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin"tools:context="com.accumulation.opensystemfileordir.app.MainActivity"><TextViewandroid:id="@+id/fileText"android:text="@string/hello_world"android:layout_width="wrap_content"android:layout_height="wrap_content" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="New Button"android:id="@+id/button"android:layout_centerVertical="true"android:layout_centerHorizontal="true" /></RelativeLayout>
选择界面布局:
ListVIew用于显示列表,LinearLayout中的用于显示当前选择以及确定和向上按钮(向上按钮融合在TextView中)
其次是ListView中中没一行的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#00000000"><LinearLayoutandroid:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@drawable/listview_selected"android:padding="6px"><ImageViewandroid:id="@+id/icon"android:layout_width="30dip"android:layout_height="30dip"></ImageView><TextViewandroid:id="@+id/text"android:layout_gravity="center_horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textColor="@drawable/black"></TextView></LinearLayout>
</LinearLayout>
然后是代码部分,主要为一个继承ListViewActivity的类和一个适配器类:
/*** Created by Qiujuer on 14-3-6.*/
public class FileDirListAdapter extends BaseAdapter {private LayoutInflater mInflater;private Bitmap mIcon;private List<String> paths;public FileDirListAdapter(Context context, List<String> paths) {this.mInflater = LayoutInflater.from(context);this.paths = paths;this.mIcon = BitmapFactory.decodeResource(context.getResources(), R.drawable.folder);}public int getCount() {return paths.size();}public Object getItem(int position) {return paths.get(position);}public long getItemId(int position) {return position;}public View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {convertView = mInflater.inflate(R.layout.file_row, null);holder = new ViewHolder();holder.text = (TextView) convertView.findViewById(R.id.text);holder.icon = (ImageView) convertView.findViewById(R.id.icon);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.icon.setImageBitmap(mIcon);holder.text.setText(new File(paths.get(position).toString()).getName());return convertView;}private class ViewHolder {TextView text;ImageView icon;}
}
Activity实现的代码如下:
/*** Created by Qiujuer on 14-3-6.*/
public class FileDirManagerMainActivity extends ListActivity {private List<String> paths = null;private String rootPath = "/";private String curPath = "/";private TextView mPath;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_file_manager_main);mPath = (TextView) findViewById(R.id.mPath);mPath.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {getFileDir(new File(curPath).getParent());}});mPath.setEnabled(true);Button buttonConfirm = (Button) findViewById(R.id.buttonConfirm);buttonConfirm.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {Intent data = new Intent(FileDirManagerMainActivity.this, MainActivity.class);Bundle bundle = new Bundle();bundle.putString("file", curPath);data.putExtras(bundle);setResult(2, data);finish();}});paths = new ArrayList<String>();getFileDir(rootPath);}private void getFileDir(String filePath) {paths.clear();mPath.setText(curPath = filePath);//设置向上是否可用if (filePath.equals(rootPath))mPath.setEnabled(false);elsemPath.setEnabled(true);File f = new File(filePath);File[] files = f.listFiles();//判断当前下是否有文件夹if (files.length <= 0)return;for (int i = 0; i < files.length; i++) {//过滤一遍//1.是否为文件夹//2.是否可访问if (files[i].isDirectory() && files[i].listFiles() != null) {paths.add(files[i].getPath());}}setListAdapter(new FileDirListAdapter(this, paths));}@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {this.getFileDir(paths.get(position));}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.file_manager_main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();String sdDir = "/sdcard/";switch (id) {case R.id.action_dir_camera:this.getFileDir(sdDir + "camera");break;case R.id.action_dir_download:this.getFileDir(sdDir + "download");break;case R.id.action_dir_music:this.getFileDir(sdDir + "music");break;case R.id.action_dir_photo:this.getFileDir(sdDir + "photo");break;case R.id.action_dir_video:this.getFileDir(sdDir + "video");break;}return super.onOptionsItemSelected(item);}}
OK,完工。因为我只需要选择文件夹的功能,所以在Activity的类中我过滤了文件的列表显示。
当然如果你是选择文件,那么你可以添加上,并添加上对文件的打开操作即可。
代码献上(Android Studio,用Eclipse中的无法导入,但是可以自行添加进去即可。)
点击打开链接
转载请注明出处!
[Android] 软件中选择文件夹功能相关推荐
- android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件
简介 XStream 是一个开源项目,一套简单实用的类库,用于序列化对象与 XML 对象之间的相互转换. 将 XML 文件内容解析为一个对象或将一个对象序列化为 XML 文件. 1.下载工具 xstr ...
- Android项目中res文件夹的作用
做过Android项目的人都会发现项目中有一个res文件夹,在这个文件夹下有drawable文件夹.layout文件夹.mipmap文件夹.values文件夹和menu文件夹. drawable文件夹 ...
- android 点击选择文件夹,Android----弹出框选择文件夹目录以及启用新Task打开文件_IT168文库.pdf...
Android弹弹 出出框框 选选择择 文文件件 夹夹 目目录录 以以及及 启启用用新新 的的T ask打打 开开文文件件 首首先先看看效效果果 图图 第第一一个个 Act iv it y很很简简单单 ...
- 通过adb打开Android系统中data文件夹下的app,database的的文件
网上有太多的办法,看的眼花扰乱, 如果你的情况和我是类似的那么久这么做 首先测试机是小米4,系统是MUIU8 7.4.24开发版的,Android6.0.1 小米的手机这点好,在安全管理中就可以roo ...
- 实现windows标准的选择文件夹功能
Delphi里有个函数SelectDiretory,重载了两种形式: function SelectDirectory( const Caption: string; const Root: Wide ...
- Android Studio中新增文件夹并新建Activity时,编译后提示“程序包R不存在”解决
开始看到网上的各种方法都不是很好用,最后看到一种方法,其实超级简单,直接加进来就行了. 比如我的工程中每个activity中都有 package com.example.chen.bluetestap ...
- Android Studio mipmap各文件夹下图片尺寸一览表
Android studio中mipmap文件夹有五个,分别对应不同的图片分辨率,具体尺寸表见下图.
- htc android sd卡,【HTC T328W】Android系统中SD卡各文件夹功能详解
希望你的补充说明,让我们一起来清理内存卡吧注意,软件没有卸载前,不建议删除其文件荚!1..android_secure 是官方app2sd的产物,删了之后装到sd卡中的软件就无法使用了,小 ...
- Android中项目中各个文件夹的含义和用途详解
1.src:存放所有的*.java源程序. 2.gen:为ADT插件自动生成的代码文件保存路径,里面的R.java将保存所有的资源ID. 3.assets:可以存放项目一些较大的资源文件,例如:图片. ...
- oracle中app文件夹下,Oracle Form开发之folder(文件夹)功能开发(一)
一.模板制作:YSFOLDER.FMB 打开TEMPLATE.FMB,如果打开的是APPSTAND.FMB,以下步骤省略: 1.FORM级触发器: 1.在WHEN-NEW-FORM-INSTANCE后 ...
最新文章
- 【Android 逆向】ART 脱壳 ( 修改 /art/runtime/dex_file.cc#OpenCommon 系统源码进行脱壳 )
- BT项目的运作之一项目建设方案与BT总包方的选择
- su: user tomcat does not exist
- 【方案分享】2021年钟薛高营销策划方案.pptx(附下载链接)
- Linux环境下FFMPEG的安装与配置
- 简谈PCB设计软件对比
- pr用什么显卡比较好_学ps pr ae用什么电脑比较好?有什么配置要求?
- CAD编辑指南5:输出高清图片和新建空白图纸
- 小马哥linux网络培训,linux基础入门
- 遍历文件夹进行点云格式转换 PCD转BIN BIN转PCD PCD转TXT TXT转PCD PLY转PCD
- 剑指offer-二叉树中值等于某个数的路径
- SCHTASKS windows计划任务
- 无论多大年纪,请保留一份童真和幻想
- 【NLP】动手实现一个句子生成器
- 苹果手机计算机报不了名,iPhone8无法连接电脑并且不弹出信任对话框怎么办?...
- 帕金森病会引起哪些并发症
- 百度云主机只能访问首页,bcloud_nginx_user.conf配置
- POJ 2305大数求余
- 很真实的语音转文字,微软厉害
- 教室占座小程序 微信小程序毕业设计开发
热门文章
- 【Codeforces Round #546 (Div. 2) E】Nastya Hasn't Written a Legend【线段树】
- Redpill:在后渗透中实现反向TCP Shell
- 关于表数据同步使用update_time时的注意事项
- dao获取到mysql存储函数_GreenDao3.0使用
- 1个系统节拍 c语言_【课程】乐理知识讲重点第九课(节拍与节奏)
- php在html中if,html里的if注释怎么使用
- Java 并发编程常识 —— by 梁飞
- 微信小程序 this.data与this.setData
- iOS通过CIFilter对图像进行滤镜处理
- Chrome firefox ie等浏览器空格nbsp;宽度不一样