- 浏览: 78795 次
- 性别:
- 来自: 珠海
文章分类
最新评论
-
lizhiqing_112:
不错,正需要xml配置的文件
省市县联动,苦力实现,android -
wulingbo2005:
谢谢啦,正需要这些数据
省市县联动,苦力实现,android -
hmj007007:
谢了 哥们 能用,辛苦啊~
省市县联动,苦力实现,android -
xhh_lucre:
爷,赞一个
poi导出excel表,简单实现 -
xueji5368:
顶楼主。。。。。
省市县联动,苦力实现,android
activity_main.xml, 增加剪头, 和空文件夹提示
pop_window.xml
抽出MainActivity中文件处理代码成FileUtil类。
MainActivity修改其中的弹窗为成员变量, 更好的控制弹窗无需重绘多次。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mainLayout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" > <RelativeLayout android:id="@+id/relative_layout" android:layout_width="fill_parent" android:layout_height="45dip" android:background="@drawable/list_item_background_normal" > <RelativeLayout android:id="@+id/current_path_pane" android:layout_width="fill_parent" android:layout_height="40dip" android:layout_alignParentLeft="true" android:layout_marginRight="48dip" android:background="@drawable/path_pane_bg" android:layout_marginTop="1dip" > <ImageView android:id="@+id/img_arrow" android:layout_width="30dip" android:layout_height="16dip" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:contentDescription="@string/img_des" /> <TextView android:id="@+id/txt_current_path" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_toLeftOf="@id/img_arrow" android:ellipsize="start" android:singleLine="true" android:textSize="12sp" /> </RelativeLayout> <ImageView android:id="@+id/img_up_level" android:layout_width="40dip" android:layout_height="40dip" android:layout_alignParentRight="true" android:contentDescription="@string/img_des" android:src="@drawable/img_back_btn_press" /> </RelativeLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/relative_layout" android:layout_marginBottom="5dip" > <ListView android:id="@+id/fileListView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#FFFFFF" android:cacheColorHint="#00000000" > </ListView> </LinearLayout> <LinearLayout android:id="@+id/layout_empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:orientation="vertical" android:visibility="visible" > <ImageView android:id="@+id/img_no_sub_file" android:layout_width="80dip" android:layout_height="80dip" android:background="@drawable/empty_icon" android:contentDescription="@string/img_des" /> <TextView android:id="@+id/txtEmpty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="@string/txt_empty" android:textColor="#9D9D9D" android:textSize="20sp" /> </LinearLayout> </RelativeLayout>
pop_window.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <ListView android:id="@+id/pathListView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#FFFFFF" android:cacheColorHint="#00000000" android:divider="#00000000" > </ListView> </LinearLayout>
抽出MainActivity中文件处理代码成FileUtil类。
package com.lxm.filebrowser; import java.io.File; import java.util.ArrayList; import java.util.List; import android.util.Log; /** * * @author lxmgfd * */ public class FileUtil { /** * 实际使用的数据 * @param files * @return */ public static List<String> getPath(String[] files) { List<String> list = new ArrayList<String>(); int len = files.length - 1; for (int i = 0; i < len; i++) { list.add(files[i]); } return list; } /** * 用于界面显示的数据, 树状 * @param files * @return */ public static List<String> getTree(String[] files) { List<String> list = new ArrayList<String>(); int len = files.length - 1; String temp = ""; for (int i = 0; i < len; i++) { temp = getSpaceByCount(i)+files[i]; list.add(temp); Log.v("test", "i="+i+" temp="+temp); } return list; } /** * 设置树形前缀 * 如: * └─XXX * @param count * @return */ public static String getSpaceByCount(int count) { StringBuffer sbSpace = new StringBuffer(); String space = " "; String line = "└─"; count = count + 1; for (int i = 0; i < count; i++) { sbSpace.append(space); } sbSpace.append(line); return sbSpace.toString(); } /** * 根据当前点击的目录获得当前目录 * @param list * @param index * @return */ public static String getCurPath(List<String> list, int index) { StringBuffer path = new StringBuffer(); int len = list.size(); String temp = ""; for (int i = 0; i < len; i++) { if (i > index) { break; } if (i == 0) // 代表根节点 { temp = list.get(i); } else { temp = File.separator+list.get(i); } path.append(temp); } return path.toString(); } /** * 获得指定路径下面的文件名或目录名 * @param path * @return */ public static List<String> getFilesByPath(String path) { List<String> list = new ArrayList<String>(); File[] files = new File(path).listFiles(); String name = ""; for (File file : files) { name = file.getName(); list.add(name); } return list; } }
MainActivity修改其中的弹窗为成员变量, 更好的控制弹窗无需重绘多次。
package com.lxm.filebrowser; import java.io.File; import java.util.ArrayList; import java.util.List; import android.annotation.SuppressLint; import android.app.Activity; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.os.Environment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.TextView; /** * * @author lxmgfd * */ public class MainActivity extends Activity { private RelativeLayout mCurrentPathPane; // 文件路径布局 private LinearLayout mEmptyFile; // 没有文件布局 private TextView mTxtCurrentPath; // 当前路径 private ImageView mImgUpLevel; // 放回上一级图片按钮 private ImageView mImgArrow; // 剪头图片按钮 private PopupWindow mPopWindow; // 弹窗 private ListView mListView; // 显示当前目录下的listview private StringArrayAdapter mAdapter; private ListView mPopListView; // 弹窗listview private StringArrayAdapter mPopAdapter; private String root; // SDcard根目录 private String curPath; private List<String> subPathList; // 当前目录下的文件集合 private List<String> listPath; // 弹窗使用的目录集合 private String SDCARD = "SD卡"; private int ARROW_UP = R.drawable.arrow_up; private int ARROW_DOWN = R.drawable.arrow_down; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initUI(); } private void initUI() { root = Environment.getExternalStorageDirectory().toString(); curPath = root; mCurrentPathPane = (RelativeLayout) findViewById(R.id.current_path_pane); mEmptyFile = (LinearLayout) findViewById(R.id.layout_empty); mTxtCurrentPath = (TextView) findViewById(R.id.txt_current_path); mImgUpLevel = (ImageView) findViewById(R.id.img_up_level); mImgArrow = (ImageView) findViewById(R.id.img_arrow); mListView = (ListView) findViewById(R.id.fileListView); initPopWindow(); changePath(); mCurrentPathPane.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (curPath.equals(root)) { return; } showPopWindow(); } }); mImgUpLevel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { curPath = new File(curPath).getParentFile().toString(); changePath(); closePopWindow(); } }); mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String temp = curPath + File.separator + subPathList.get(position); File file = new File(temp); if (file.isDirectory()) // 当前文件为目录则进入该目录。 { curPath = temp; changePath(); } } }); } /** * 当前目录发生变化时调用函数, 修改当前目录位置, 设置返回按钮是否显示, 设置当前目录下的所有文件 */ private void changePath() { setCurrentPath(mTxtCurrentPath, curPath.replace(root, SDCARD)); showImgView(); setListViewValue(); showEmptyFileView(); } /** * 设置按钮上面的文字 * @param txtView * @param strText */ private void setCurrentPath(TextView txtView, String strText){ txtView.setText(strText); } /** * 显示返回按钮和剪头 */ private void showImgView() { int flag = View.VISIBLE; if (curPath.equals(root)) { flag = View.INVISIBLE; } mImgArrow.setVisibility(flag); setArrowDirection(ARROW_DOWN); mImgUpLevel.setVisibility(flag); } private void setArrowDirection(int dir) { mImgArrow.setBackgroundResource(dir); } /** * 列出当前文件目录下所有文件 */ private void setListViewValue() { subPathList = FileUtil.getFilesByPath(curPath); if (null == mAdapter) { mAdapter = new StringArrayAdapter(getApplicationContext(), subPathList, 1); } mAdapter.setList(subPathList); mListView.setAdapter(mAdapter); } /** * 是否显示没有文件 */ private void showEmptyFileView() { int flag = View.GONE; if (subPathList.size() < 1) { flag = View.VISIBLE; } mEmptyFile.setVisibility(flag); } /** * 初始化弹窗 */ @SuppressWarnings("deprecation") @SuppressLint("InflateParams") private void initPopWindow() { LayoutInflater inflater = LayoutInflater.from(getApplicationContext()); View view = inflater.inflate(R.layout.pop_window, null); mPopWindow = new PopupWindow(findViewById(R.id.mainLayout), LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); mPopWindow.setContentView(view); mPopWindow.setFocusable(false); mPopWindow.setBackgroundDrawable(new BitmapDrawable()); mPopListView = (ListView) view.findViewById(R.id.pathListView); mPopListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { clickPopItem(position); closePopWindow(); } } ); } /** * 处理点击位置 * @param position */ private void clickPopItem(int position) { if (curPath.endsWith(listPath.get(position)) == false) { curPath = FileUtil.getCurPath(listPath, position); changePath(); } } /** * 显示弹窗 * @param view */ private void showPopWindow() { if (mPopWindow.isShowing() == false) { setPopListViewValue(); mPopWindow.showAsDropDown(findViewById(R.id.relative_layout)); mPopWindow.setOutsideTouchable(false); setArrowDirection(ARROW_UP); } else { closePopWindow(); } } /** * 关闭 */ private void closePopWindow() { mPopWindow.dismiss(); setArrowDirection(ARROW_DOWN); } /** * 设置弹窗数据 */ private void setPopListViewValue() { if (curPath.equals(root)) { return ; } String path = curPath.replace(root + File.separator, ""); String[] files = path.split(File.separator); List<String> listTree = new ArrayList<String>(); // UI显示数据 listPath = new ArrayList<String>(); // 实际使用数据 listPath.add(root); // 添加根节点 listPath.addAll(FileUtil.getPath(files)); listTree.add(SDCARD); // 添加根节点 listTree.addAll(FileUtil.getTree(files)); if (null == mPopAdapter) { mPopAdapter = new StringArrayAdapter(this, listTree, 2); } mPopAdapter.setList(listTree); mPopListView.setAdapter(mPopAdapter); } }
发表评论
-
Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 详解
2015-01-13 10:52 12469转自http://blog.csdn.net/lucherr/ ... -
Android中WindowManager.LayoutParams类详解
2015-01-12 17:05 755WindowManager.LayoutPara ... -
布局界面异常,无法看到当前布局
2015-01-05 14:40 1664表现如题, 在代码运行与设备上能看到效果, 在布局界面看不到当 ... -
Error generating final archive: Debug Certificate expired on
2012-03-17 01:43 1292今天发现我原来android也玩满一年了 出现上面这个问题。 ... -
webview下的网页的数据在android2.3能正常显示,在2.1-2.2上面不能显示
2012-02-09 13:13 1575今天早上刚上班,上面就说了年前弄的东西有问题,在webview ... -
把string类型的R.drawable.xx转换去int类型的方法
2012-02-07 16:53 1282不罗嗦上代码 String sImage = " ... -
设置TextView部分文字的颜色和背景(高亮显示)
2011-08-09 17:09 3114参考了zhangkun716717-126-com的博客例子, ... -
TabHost标题图片变换例子
2011-05-05 15:29 3219好久没上了,今天弄个小例子,关于标题图片变化的例子,直 ... -
layoutinflater中嵌套layoutinflater
2011-03-30 01:00 1098昨天为了做一个效果遇到了点问题,就是在点击某个EditTex ... -
省市县联动,苦力实现,android
2011-03-22 15:34 3484第一次发帖,自己写了个省市县联动,没有用数据库,完全是苦力完 ...
相关推荐
这个"Android简易sd卡文件浏览器"就是一个这样的工具,它允许用户浏览SD卡上的文件,并选择特定文件,然后返回该文件的路径,以便其他应用或服务可以使用这个路径进行文件操作,如上传。 在Android系统中,访问SD卡...
Android设备上的文件管理是用户日常操作的重要环节,而“Android GetSDTree”就是一个针对SD卡的简易文件浏览器,它允许用户方便地浏览和管理手机存储中的文件和目录。 一、Android 文件系统简介 Android 文件系统...
AndroidGetSDTree是一个简易的SD卡文件浏览器应用,它为用户提供了方便的界面来查看和管理Android设备上的SD卡内容。这款应用的核心在于其源码,它揭示了Android系统中如何访问和操作文件系统的知识,这对于Android...
本篇将深入探讨一款名为GetSDTree的Android应用源码,它是一个简单的SD卡文件浏览器,旨在帮助用户方便地浏览和管理存储在SD卡上的文件。我们将从以下几个方面对源码进行分析: 1. **文件系统访问**: 在Android...
《Android代码实现:GetSDTree——简易SD卡文件浏览器》 在Android开发中,与文件系统打交道是一项常见的任务。GetSDTree项目是一个简单的SD卡文件浏览器应用,它可以帮助用户查看和管理存储在SD卡上的文件和目录。...
此外,`android.provider.MediaStore`可以用来访问媒体文件,而`Environment`类则用于获取外部存储(SD卡)的路径。 6. **Activity与Intent**: `Activity`是Android应用中的一个基本组件,代表用户界面的一个屏幕。...
标题中的“安卓Android源码——GetSDTree(简单SD卡文件浏览器)”暗示了这是一个用于在Android设备上浏览SD卡文件的简易应用项目。这个项目可能包含一个简单的用户界面,允许用户查看并管理SD卡上的文件和目录。接...
1. **目录遍历**:程序会遍历Android设备上的所有文件夹,包括外部存储(如SD卡)和内部存储。这使得用户能够访问到系统的所有可读取目录。 2. **用户交互界面**:设计了一个直观的UI,展示文件系统的层级结构,...
在这个"Fragment制作的简易多媒体文件管理器"项目中,我们看到开发者利用Fragment来创建了一个专门针对TV端的多媒体文件浏览应用。下面将详细解析这个项目的相关知识点。 首先,Fragment的使用:Fragment是Android ...
例如,`getExternalStorageDirectory()`方法可以获取外部存储(通常是SD卡)的根目录。同时,Android 6.0(API 级别23)及以上版本需要申请`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限。 接着,遍历...
此外,考虑到不同设备的存储结构,不要忘了处理外部存储卡(SD卡)的路径,如本例中的`sdRootPath = Environment.getExternalStorageDirectory().getAbsolutePath()`。 总的来说,这个简易文件管理器实例提供了一个...
Android设备有多种存储空间,包括内部存储(Internal Storage)、外部存储(External Storage,又分为可卸载的和不可卸载的)以及外部SD卡。开发者需要根据数据的重要性和隐私性来选择合适的存储位置。内部存储通常...
在"Android应用源码简易文件浏览管理器项目"中,我们可以深入学习以下技术点: 1. **Android开发环境**:包括Android Studio IDE、Gradle构建系统以及Android SDK的使用。 2. **Activity和Fragment**:文件浏览器...
【文件系统和图像存储】使用特定的文件系统库,STM32F407可以对SD卡进行格式化和文件操作,将图像数据以BMP格式写入文件,确保数据的可靠存储和读取。 【用户交互】设计中的按键控制允许用户选择不同的操作,如拍照...
1. 功能需求:能够阅读PDF文件、支持多任务处理、支持SD卡存储等。 2. 性能需求:能够快速加载PDF文件、支持高效的浏览体验等。 3. 用户体验需求:能够提供友好的用户界面、支持多种语言等。 六、简易PDF阅读器的...
在实际开发中,简易交易网还需要考虑其他方面,如支付接口的集成,支持多种支付方式如信用卡、支付宝、微信支付等;用户体验优化,提供清晰的界面和流畅的操作流程;以及后台数据分析,帮助管理者了解销售情况,优化...
- 文件路径处理:Android应用需要处理外部存储(SD卡)的权限,以读取或保存音乐文件。 4. **媒体库集成**: - MediaScannerConnection:当添加新音乐或更新音乐库时,开发者可能使用此API来扫描设备上的媒体文件...
【Android小型资源管理器】是一个自行开发的应用程序,旨在帮助用户轻松浏览并管理SD卡上的文件和目录。这款简易的资源管理器实现了基本的文件查看和操作功能,如浏览目录结构以及通过长按操作删除文件。尽管应用在...