XC文件管理器-打造优美易用的文件管理器
概述
详细
一、概述
XC文件管理器,是基于Android6.0开发的一个方便易用的文件管理器,具有文件的目录管理和文件的管理,主要包括文件的新建、删除、重命名、复制,移动剪切以及文件详情查看等文件和目录的功能,同时支持文件和目录的批量管理,应该功能较全,视图提供两种:网格视图以及列表视图,应用界面简洁美观,易用性强,是较好易用的一款Android文件管理应用。
二、应用效果图
三、整体架构以及设计开发方案
1.整体页面框架采用Header+body+Footer三段式设计,核心首页页面以及Footer布局代码如下:
- <RelativeLayout xmlns:android="
- http://schemas.android.com/apk/res/android
- "
- xmlns:tools="
- http://schemas.android.com/tools
- "
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="#F6F6F6"
- >
- <include layout="@layout/main_header"/>
- <include layout="@layout/main_start"/>
- <include layout="@layout/main_path"/>
- <include layout="@layout/sdcard_listview"/>
- <include layout="@layout/sdcard_gridview"/>
- <include layout="@layout/morefile_menu_listview"/>
- <include layout="@layout/file_search_view"/>
- <include layout="@layout/main_footer"/>
- </RelativeLayout>
- <RelativeLayout xmlns:android="
- http://schemas.android.com/apk/res/android
- "
- xmlns:tools="
- http://schemas.android.com/tools
- "
- android:layout_width="fill_parent"
- android:layout_height="60dp"
- android:layout_alignParentBottom="true"
- android:background="#F6F6F6"
- android:id="@+id/main_relativelayout_footer"
- >
- <LinearLayout
- android:id="@+id/llWelcomeSmile"
- android:layout_width="fill_parent"
- android:layout_height="60dp"
- android:orientation="horizontal"
- android:gravity="center"
- >
- <ImageView
- android:id="@+id/ivWelcomeSmile"
- android:layout_width="wrap_content"
- android:layout_height="60dp"
- android:src="@drawable/smile"
- android:visibility="visible"
- />
- <TextView
- android:id="@+id/tvWelcomeText"
- android:layout_width="wrap_content"
- android:layout_height="60dp"
- android:gravity="center_vertical"
- android:text=" 欢迎您使用XC文件管理器"
- android:textColor="#222222"
- android:visibility="visible"
- />
- </LinearLayout>
- <GridView
- android:id="@+id/gvFooterView"
- android:layout_width="fill_parent"
- android:layout_height="60dp"
- android:layout_alignParentBottom="true"
- android:visibility="gone"
- android:listSelector="@drawable/meu_item_gb_blue2"
- android:background="#04AEDA"
- >
- </GridView>
- <GridView
- android:id="@+id/gvFileMenuGrid"
- android:layout_width="fill_parent"
- android:layout_height="60dp"
- android:layout_alignParentBottom="true"
- android:visibility="gone"
- android:listSelector="@drawable/meu_item_gb_blue2"
- android:background="#04AEDA"
- >
- </GridView>
- <GridView
- android:id="@+id/gvCopyAndMoveMenuGrid"
- android:layout_width="fill_parent"
- android:layout_height="60dp"
- android:layout_alignParentBottom="true"
- android:visibility="gone"
- android:listSelector="@drawable/meu_item_gb_blue2"
- android:background="#04AEDA"
- >
- </GridView>
- </RelativeLayout>
2.获取手机文件目录核心实现
- /**
- * 设置MainList的数据
- */
- public void setMainlistData(){
- PhoneDir dir = new PhoneDir();
- dir.setImageID(R.drawable.sdcard);
- dir.setStrDirName("存储卡/SD卡目录");
- String dAllSpace = CommonUtils.getSdCardAllSpace();
- String dFreeSpace = CommonUtils.getSdCardFreeSpace();
- String strOther = ""+dFreeSpace +"GB可用/"+dAllSpace+"GB总计";
- dir.setStrDirOther(strOther);
- mainlist.add(dir);
- dir = new PhoneDir();
- dir.setImageID(R.drawable.systemdir);
- dir.setStrDirName("系统目录/手机目录");
- dir.setStrDirOther("请谨慎操作系统目录文件");
- mainlist.add(dir);
- }
- /**
- * 设置要显示的文件列表数据的数据
- */
- public void setFileListData(String strPath){
- String strShowPath;
- if(strCurPath.contains(CommonUtils.getSdCardRoot())){
- strShowPath = strCurPath.replaceAll(CommonUtils.getSdCardRoot(), "我的手机》存储卡");
- }else{
- strShowPath = strCurPath.replaceAll(FileUtils.getPhoneRoot(), "我的手机》系统目录");
- }
- strShowPath =strShowPath.replaceAll("/", "》");
- tvShowPath.setText(strShowPath);
- ArrayList fileList = FileUtils.getFilesOfCurDir(strPath);
- FileItem item ;
- File file ;
- sdcardlist.clear();
- sdcardGrid.clear();
- for(int i = 0;i<fileList.size();i++){
- item = new FileItem();
- file = (File) fileList.get(i);
- if(file.isDirectory()){//目录情况
- item.setImageID(R.drawable.folder);
- item.setbIsDir(true);
- item.setnFileSize(0);
- }else{//文件情况
- item.setImageID(R.drawable.file);
- item.setbIsDir(false);
- item.setnFileSize(file.length());
- }
- item.setStrFilePath(file.getAbsolutePath());
- item.setStrFileName(file.getName());
- item.setStrDateTime(FileUtils.getFileLastModifiedTime(file));
- sdcardlist.add(item);
- sdcardGrid.add(item);
- }
- }
3.实现列表和缩略图方格UI布局样式切换
该功能主要是基于ListView和GridView进行UI 和数据适配器的更新切换,核心代码如下
- if(mViewTypeStatus == Constant.VIEW_LISTVIEW)
- {//ListView切换到GridView
- llSdcardList.setVisibility(View.GONE);
- llSdcardGrid.setVisibility(View.VISIBLE);
- sdcardListView.setVisibility(View.GONE);
- sdcardGridView.setVisibility(View.VISIBLE);
- ImageView iv = (ImageView)view.findViewById(R.id.ivItemImage);
- iv.setImageResource(R.drawable.footer_menu_list);
- mViewTypeStatus = Constant.VIEW_GRIDVIEW;
- setFileListData(strCurPath);
- refreshData();
- }
- else{//GridView切换到ListView
- llSdcardList.setVisibility(View.VISIBLE);
- llSdcardGrid.setVisibility(View.GONE);
- sdcardGridView.setVisibility(View.GONE);
- sdcardListView.setVisibility(View.VISIBLE);
- ImageView iv = (ImageView)view.findViewById(R.id.ivItemImage);
- iv.setImageResource(R.drawable.footer_menu_grid);
- mViewTypeStatus = Constant.VIEW_LISTVIEW;
- setFileListData(strCurPath);
- refreshData();
- }
- break;
- /**
- * 刷新当前页面(ListView或者GridView)数据
- */
- public void refreshData(){
- if(mViewTypeStatus == Constant.VIEW_LISTVIEW){
- sdcardListAdapter = new SdcardListAdapter(MainActivity.this, sdcardlist);
- sdcardListView.setAdapter(sdcardListAdapter);
- }else {
- sdcardGridAdapter = new SdcardGridAdapter(MainActivity.this, sdcardGrid);
- sdcardGridView.setAdapter(sdcardGridAdapter);
- }
- if(sdcardlist.size() <= 0 ){
- ToastUtils.ToastAtCenterPosition(MainActivity.this, "目录为空,没有任何文件!");
- }
- }
4.添加文件搜索功能
搜索功能是搜索文件目录下的所有符合搜索关键字的文件或者目录,相关初始化和核心实现代码如下:
- /**
- * 初始化 搜索框视图 即rlSearchView视图
- */
- public void initSearchView(){
- //初始化搜索框视图
- rlSearchView = (RelativeLayout)findViewById(R.id.rlSearchView);
- rlSearchView.setVisibility(View.GONE);
- final EditText editText = (EditText)rlSearchView.findViewById(R.id.etSearchTextView);
- editText.addTextChangedListener(new TextWatcher() {
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- // TODO Auto-generated method stub
- String condition = editText.getText().toString();
- if (condition.equals("")) {
- setFileListData(strCurPath);
- refreshData();
- }else{
- searchFilesList.clear();
- searchSdCardFiles(new File(strCurPath));
- setSearchListData(condition);
- refreshData();
- }
- }
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count,
- int after) {
- // TODO Auto-generated method stub
- }
- @Override
- public void afterTextChanged(Editable s) {
- // TODO Auto-generated method stub
- }
- });
- ImageView ivCancelSearch = (ImageView)rlSearchView.findViewById(R.id.ivCancelSearch);
- ivCancelSearch.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- rlSearchView.setVisibility(View.GONE);
- }
- });
- }
- /**
- * 遍历SD卡
- */
- public void searchSdCardFiles(File root){
- File files[] = root.listFiles();
- if(files != null)
- for(File f:files){
- if(f.isDirectory()){
- searchFilesList.add(f);
- searchSdCardFiles(f);
- }
- else{
- searchFilesList.add(f);
- }
- }
- }
- /**
- * 设置要显示的搜索出来的文件列表数据的数据
- */
- public void setSearchListData(String condition){
- String strShowPath = "搜索结果:";
- tvShowPath.setText(strShowPath);
- FileItem item ;
- File file ;
- sdcardlist.clear();
- for(int i = 0;i<searchFilesList.size();i++){
- item = new FileItem();
- file = (File) searchFilesList.get(i);
- if(!file.getAbsolutePath().contains(condition))
- continue;
- if(file.isDirectory()){//目录情况
- item.setImageID(R.drawable.folder);
- item.setbIsDir(true);
- item.setnFileSize(0);
- }else{//文件情况
- item.setImageID(R.drawable.file);
- item.setbIsDir(false);
- item.setnFileSize(file.length());
- }
- item.setStrFilePath(file.getAbsolutePath());
- item.setStrFileName(file.getName());
- item.setStrDateTime(FileUtils.getFileLastModifiedTime(file));
- sdcardlist.add(item);
- }
- }
5.由于本项目代码量比较多,在此就不把其他所有功能都一一罗列了,其他的常规的复制,剪切,新建文件等功能,以及版权和检查更新弹窗功能实现,请大家下载源码具体,谢谢大家,希望对大家有所帮助。
四、项目代码目录结构
注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权
XC文件管理器-打造优美易用的文件管理器的更多相关文章
- [转]教大家如何打造使用Tcpview(tcp查看器
原文地址:教大家如何打造使用Tcpview(tcp查看器)作者:jybasenet3 一玩 VS 对战平台的同学有一次发现了一个可以踢人的方法,就是用 TcpView 把那个连 接关掉.后来VS ...
- 使用Vitamio打造自己的Android万能播放器(6)——在线播放(播放列表)
前言 新版本的VPlayer由设计转入开发阶段,预计开发周期为一个月,这也意味着新版本的Vitamio将随之发布,开发者们可以和本系列文章一样,先开发其他功能.本章内容为"在线视频播放列表& ...
- 使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)
前言 为了保证每周一篇的进度,又由于Vitamio新版本没有发布, 决定推迟本地播放的一些功能(截图.视频时间.尺寸等),跳过直接写在线播放部分的章节.从Vitamio的介绍可以看得出,其支持http ...
- 使用Vitamio打造自己的Android万能播放器(4)——本地播放(快捷搜索、数据存储)
前言 关键字:Vitamio.VPlayer.Android播放器.Android影音.Android开源播放器 本章节把Android万能播放器本地播放的主要功能(缓存播放列表和A-Z快速查询功能) ...
- 使用Vitamio打造自己的Android万能播放器(3)——本地播放(主界面、播放列表)
前言 打造一款完整可用的Android播放器有许多功能和细节需要完成,也涉及到各种丰富的知识和内容,本章将结合Fragment.ViewPager来搭建播放器的主界面,并实现本地播放基本功能.系列文章 ...
- 使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音量、缩放
前言 本章继续完善播放相关播放器的核心功能,为后续扩展打好基础. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://ove ...
- 使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)
前言 本章将实现非常实用的功能——下载在线视频.涉及到多线程.线程更新UI等技术,还需思考产品的设计,如何将新加的功能更好的融入到现有的产品中,并不是简单的加一个界面就行了,欢迎大家交流产品设计和技术 ...
- 端云协同,打造更易用的AI计算平台
内容来源:华为开发者大会2021 HMS Core 6 AI技术论坛,主题演讲<端云协同,HUAWEI HiAI Foundation打造更易用的AI计算平台>. 演讲嘉宾:华为海思AI技 ...
- 如何用vue打造一个移动端音乐播放器
写在前面 没错,这就是慕课网上的那个vue音乐播放器,后台是某音乐播放器的线上接口扒取,虽然这类项目写的人很多,但不得不说这还是个少有的适合vue提升的好项目,做这个项目除了想写一个比较大并且功能复杂 ...
随机推荐
- postgresql共享内存的三个结构体
本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/16105797 postgresql的共享内存维护主要 ...
- iOS 加密的3种方法
//需要导入 #import <CommonCrypto/CommonCryptor.h> ==============MD5加密============ NSString *str ...
- [leetcode]Substring with Concatenation of All Words @ Python
原题地址:https://oj.leetcode.com/problems/substring-with-concatenation-of-all-words/ 题意: You are given a ...
- 【Spark】SparkStreaming-Kafka-Redis-集成-基础参考资料
SparkStreaming-Kafka-Redis-集成-基础参考资料 Overview - Spark 2.2.0 Documentation Spark Streaming + Kafka In ...
- FastText 文本分类使用心得
http://blog.csdn.net/thriving_fcl/article/details/53239856 最近在一个项目里使用了fasttext[1], 这是facebook今年开源的一个 ...
- centos配置ssh免密码登录
master.slave1两台机器实现ssh免密码登录,user:hadoop,passwd:123456 1.设置master: vi /etc/sysconfig/network hostname ...
- HTML/CSS-返回到上一页
<a class="back_btn" href="javascript:window.history.go(-1)">< 返回</a& ...
- protobuf-c的学习总结
1.前言 项目中用到protobuf-c进行数据序列化,好处在于后期程序扩展性非常好,只需要改动proto的定义就可以保持兼容,非常的灵活方便.关于protobuf-c的详细介绍可以参考google官 ...
- 怎样将 MySQL 迁移到 MariaDB 上
自从甲骨文收购 MySQL 后,由于甲骨文对 MySQL 的开发和维护更多倾向于闭门的立场,很多 MySQL 的开发者和用户放弃了它.在社区驱动下,促使更多人移到 MySQL 的另一个叫 MariaD ...
- OpenGL ES 3.0之Texturing纹理详解(一)
本文流程 1.Texturing基础 2.装载Texturing和mipmapping 3.纹理过滤和包装 4.Texture level-of-detail, swizzles, and depth ...