- 浏览: 112483 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
15164392341:
文章和代码完全合不上
Android 自定义选项卡按钮和选项卡位置 -
mirzzzz:
下载的东西什么玩意?!
Android 自定义选项卡按钮和选项卡位置 -
hxy936:
为什么执行到MainActivity.this.startAc ...
Android 多语言实现 -
zf1217:
很高兴看到这篇文章。最近我的项目中也遇到这个问题。可是不知道什 ...
Android程序拨打带#号电话失败的处理方法 -
androidvshuang:
androidvshuang 写道16楼:里面放一个确认对话框 ...
用ActivityGroup解决TabHost中多个Activity跳转问题
chooserdialog.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="40dip"> <Button android:layout_width="40dip" android:layout_height="40dip" android:text="HOME" android:id="@+id/btn_home" android:layout_gravity="left" android:layout_weight="1" /> <LinearLayout android:layout_width="140dip" android:layout_height="35dip" android:id="@+id/dir_layout" android:gravity="center" android:layout_weight="1"> </LinearLayout> <!-- <TextView android:layout_width="140dip" android:layout_height="35dip" android:id="@+id/dir_str" android:gravity="center" android:layout_weight="1" /> --> <Button android:layout_width="40dip" android:layout_height="40dip" android:text="BACK" android:id="@+id/btn_back" android:layout_gravity="right" android:layout_weight="1" /> </LinearLayout> <ListView android:layout_width="fill_parent" android:layout_height="300dip" android:id="@+id/list_dir" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/btn_ok" android:text="OK"/> </LinearLayout>
package hkp.dirchooser;
import java.io.File; import java.util.ArrayList; import java.util.List; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.view.Gravity; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; /** * @author HKP * 2011-6-17 * */ public class DirChooserDialog extends Dialog implements android.view.View.OnClickListener{ private ListView list; ArrayAdapter<String> Adapter; ArrayList<String> arr=new ArrayList<String>(); Context context; private String path; private TextView title; private EditText et; private Button home,back,ok; private LinearLayout titleView; private int type = 1; private String[] fileType = null; public final static int TypeOpen = 1; public final static int TypeSave = 2; /** * @param context * @param type 值为1表示创建打开目录类型的对话框,2为创建保存文件到目录类型的对话框 * @param fileType 要过滤的文件类型,null表示只选择目录 * @param resultPath 点OK按钮返回的结果,目录或者目录+文件名 */ public DirChooserDialog(Context context,int type,String[]fileType,String resultPath) { super(context); // TODO Auto-generated constructor stub this.context = context; this.type = type; this.fileType = fileType; this.path = resultPath; } /* (non-Javadoc) * @see android.app.Dialog#dismiss() */ @Override public void dismiss() { // TODO Auto-generated method stub super.dismiss(); } /* (non-Javadoc) * @see android.app.Dialog#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.chooserdialog); path = getRootDir(); arr = (ArrayList<String>) getDirs(path); Adapter = new ArrayAdapter<String>(context,android.R.layout.simple_list_item_1, arr); list = (ListView)findViewById(R.id.list_dir); list.setAdapter(Adapter); list.setOnItemClickListener(lvLis); home = (Button) findViewById(R.id.btn_home); home.setOnClickListener(this); back = (Button) findViewById(R.id.btn_back); back.setOnClickListener(this); ok = (Button) findViewById(R.id.btn_ok); ok.setOnClickListener(this); titleView = (LinearLayout) findViewById(R.id.dir_layout); if(type == TypeOpen){ title = new TextView(context); titleView.addView(title); title.setText(path); }else if(type == TypeSave){ et = new EditText(context); et.setWidth(240); et.setHeight(70); et.setGravity(Gravity.CENTER); et.setPadding(0, 2, 0, 0); titleView.addView(et); et.setText("wfFileName"); } // title = (TextView) findViewById(R.id.dir_str); // title.setText(path); } //动态更新ListView Runnable add=new Runnable(){ @Override public void run() { // TODO Auto-generated method stub arr.clear(); //System.out.println("Runnable path:"+path); //必须得用这种方法为arr赋值才能更新 List<String> temp = getDirs(path); for(int i = 0;i < temp.size();i++) arr.add(temp.get(i)); Adapter.notifyDataSetChanged(); } }; private OnItemClickListener lvLis=new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { String temp = (String) arg0.getItemAtPosition(arg2); //System.out.println("OnItemClick path1:"+path); if(temp.equals("..")) path = getSubDir(path); else if(path.equals("/")) path = path+temp; else path = path+"/"+temp; //System.out.println("OnItemClick path2"+path); if(type == TypeOpen) title.setText(path); Handler handler=new Handler(); handler.post(add); } }; private List<String> getDirs(String ipath){ List<String> file = new ArrayList<String>(); //System.out.println("GetDirs path:"+ipath); File[] myFile = new File(ipath).listFiles(); if(myFile == null){ file.add(".."); }else for(File f: myFile){ //过滤目录 if(f.isDirectory()){ String tempf = f.toString(); int pos = tempf.lastIndexOf("/"); String subTemp = tempf.substring(pos+1, tempf.length()); // String subTemp = tempf.substring(path.length(),tempf.length()); file.add(subTemp); //System.out.println("files in dir:"+subTemp); } //过滤知道类型的文件 if(f.isFile() && fileType != null){ for(int i = 0;i< fileType.length;i++){ int typeStrLen = fileType[i].length(); String fileName = f.getPath().substring(f.getPath().length()- typeStrLen); if (fileName.toLowerCase().equals(fileType[i])) { file.add(f.toString().substring(path.length()+1,f.toString().length())); } } } } if(file.size()==0) file.add(".."); // System.out.println("file[0]:"+file.get(0)+" File size:"+file.size()); return file; } /* (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View v) { // TODO Auto-generated method stub if(v.getId() == home.getId()){ path = getRootDir(); if(type == TypeOpen) title.setText(path); Handler handler=new Handler(); handler.post(add); }else if(v.getId() == back.getId()){ path = getSubDir(path); if(type == TypeOpen) title.setText(path); Handler handler=new Handler(); handler.post(add); }else if(v.getId() == ok.getId()){ dismiss(); if(type == TypeSave) path = path+"/"+et.getEditableText().toString()+".wf"; Toast.makeText(context, path, Toast.LENGTH_SHORT).show(); } } private String getSDPath(){ File sdDir = null; boolean sdCardExist = Environment.getExternalStorageState() .equals(android.os.Environment.MEDIA_MOUNTED); //判断sd卡是否存在 if(sdCardExist) { sdDir = Environment.getExternalStorageDirectory();//获取根目录 } if(sdDir == null){ //Toast.makeText(context, "No SDCard inside!",Toast.LENGTH_SHORT).show(); return null; } return sdDir.toString(); } private String getRootDir(){ String root = "/"; path = getSDPath(); if (path == null) path="/"; return root; } private String getSubDir(String path){ String subpath = null; int pos = path.lastIndexOf("/"); if(pos == path.length()){ path = path.substring(0,path.length()-1); pos = path.lastIndexOf("/"); } subpath = path.substring(0,pos); if(pos == 0) subpath = path; return subpath; } }
package hkp.dirchooser;
import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn = (Button) findViewById(R.id.btn_open); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String path = null; String [] fileType = {"dst"};//要过滤的文件类型列表 DirChooserDialog dlg = new DirChooserDialog(MainActivity.this,2,fileType,path); dlg.setTitle("Choose dst file dir"); dlg.show(); } }); } }
- DirChooser.rar (45.1 KB)
- 下载次数: 103
发表评论
-
android的尺寸计量单位
2012-08-22 14:09 1221Android SDK 支持的尺寸单位有6个:px(像 ... -
Android ListView 有CheckBox时点击无响应解决方法
2011-11-08 20:15 2927问题:在ListView的Item上有一个CheckBox,点 ... -
Android自定义Button字体颜色
2011-10-26 18:30 3922我们可以使用selector来实现Button的特效,如图所示 ... -
[转载]Android中shape的使用
2011-10-24 23:43 1196查看原文 Android中常常使用shape来定 ... -
[转载]Android应用Icon大小在不同分辨率下定义
2011-10-24 23:31 1737查看原文 对于Android平台来说,不同分 ... -
[转载]android 软键盘弹出时的界面控制
2011-10-21 09:39 8004查看原文 一、软键盘显示的原理 软键盘 ... -
MyEclipse9.0 安装Android ADT14
2011-10-20 09:22 4225Eclipse安装ADT 时 步骤是开 Eclip ... -
Android程序拨打带#号电话失败的处理方法
2011-10-12 19:33 2433在开发Android拨号软件时,程序播出的号码中带有#号的,一 ... -
用ActivityGroup解决TabHost中多个Activity跳转问题
2011-10-05 16:39 24322最近在做一个程序,刚开始没考虑全,就用TabHost做了,后 ... -
[转载]Android ListView 自定义背景后 滚动时的背景变黑问题
2011-09-29 15:47 2076ListView是常用的显示控件,默认背景是和系统窗口一样的 ... -
Activity 中动态刷新LisView
2011-09-23 15:20 1903功能点击变换数据按钮后,ListView自动更新 ... -
64位Win 7 下eclipse的svn插件找不到 javaHL
2011-09-18 13:28 16462Subclipse是一个很优秀的SVN客户端。它提供了Cli ... -
[转载]IOS开发开篇之Objective-C语法基础
2011-09-14 08:15 2817作者从在吸收众多网友经验基础上,结合自己在IOS开发的 ... -
Android 自定义选项卡按钮和选项卡位置
2011-09-08 14:38 19273这是前段时间做的一个项目的一部分,我把它单独提取出来!效果如 ... -
Android 多语言实现
2011-09-07 10:05 8422首先创建多语言资源: internationaliz ... -
Android后退时Activity重复出现解决办法
2011-09-02 16:38 2812当Activity之间进行跳转的时候,为每个intent设置一 ... -
Android自适应不同版本的程序退出方法
2011-09-02 16:33 1723public void exit() { in ...
相关推荐
这个“Android文件目录选择器”是基于某个博客文章的代码实现,虽然原始作者没有提供完整的代码,但根据描述,只需几张图片就能完成基本功能。下面将详细介绍这个功能的实现原理和相关知识点。 1. **文件系统访问...
总结来说,"Android地名选择器 全国省市区选择器 城市选择 区县选择"是一个实现中国地理位置选择的Android组件。它涉及UI设计、数据结构、事件处理、搜索功能等多个方面,开发者需要综合运用Android的各种技术来实现...
综上所述,这个“android 时间选择器”项目涉及到Android自定义视图开发、UI定制、事件处理、动画实现等多个技术点,对于提升Android应用的用户体验具有重要意义。通过学习和使用这样的组件,开发者可以更自由地塑造...
以`androidWheelView-master`为例,这是一个开源项目,它提供了一个自定义的滚轮选择器实现。项目可能包含了以下关键部分: 1. `WheelView`类:这是自定义滚轮选择器的核心类,它实现了滚轮的绘制、滚动逻辑以及...
本话题主要探讨如何实现自定义的年月日日期选择器和时分时间选择器,这两个组件在许多应用程序中都非常常见,例如在事件安排、预约服务或者设置提醒等功能中。 首先,我们来看如何创建自定义的年月日日期选择器。这...
自定义Android 横向选择器
在本项目“完美的android颜色选择器”中,我们将探讨其核心特点以及实现方法。 首先,颜色选择器提供了用户交互的界面,用户可以直接在颜色区域内点击选取喜欢的颜色。这种设计让用户能够直观地看到所有可能的颜色...
1. **地区选择器实现**: - 在Android中,地区选择器通常由一系列的ListView或者RecyclerView组成,显示省、市、区的分级列表。用户逐级选择,最终得到一个完整的地址信息。 - 此demo可能采用递归加载的方式,即当...
总之,“Android 文件选择器(支持选择u盘)”是一个全面的解决方案,它涵盖了多种存储设备的文件选择需求,提供了多选、文件类型过滤等高级功能,是Android开发者在实现类似功能时的一个参考实例。在MyApplication8...
本篇文章将深入探讨Android颜色选择器的实现原理、使用方法以及如何在项目中自定义和集成。 首先,Android SDK提供了一个内置的颜色选择器组件,名为`ColorPickerDialog`,但这通常只适用于简单的颜色选择需求。要...
在Android开发中,系统默认的日期和时间选择器虽然实用,但往往无法满足所有场景的需求。因此,开发者经常需要自定义日期选择器来提供更符合应用风格或特定功能的交互体验。这篇内容将深入探讨如何在Android中创建一...
3. **图片选择器实现**: 要实现图片选择器,通常需要启动一个 Intent,如 ACTION_PICK 或 ACTION_GET_CONTENT,这样用户可以选择一张图片。在 Java 代码中创建这样的 Intent,然后使用 QAndroidJniObject 将其转换...
Android时间选择器有两种常见的实现方式:使用系统的`DatePicker`和`TimePicker`,以及自定义的`MyTimeSelector`组件。前者简洁易用,适合快速集成;后者提供了更大的定制空间,可以根据项目需求调整样式和功能。...
本文将详细介绍Android颜色选择器的种类、实现方式以及如何在项目中集成这4种不同的颜色选择器样式。 1. **彩虹颜色选择器(Rainbow Color Picker)** 这种颜色选择器通常通过一个滑块来让用户选择色相(Hue),而...
下面是一个简单的文件选择器实现步骤: 1. **创建UI**:布局文件中包含一个`RecyclerView`,用于展示文件和目录。每个条目可以是一个自定义的`ViewHolder`,显示文件名、大小、类型等。 2. **数据模型**:创建一个...
时间选择器在Android中通常是通过DatePicker或TimePicker组件实现的。在这个项目中,开发者可能扩展了这些原生组件或者创建了自定义视图,以支持农历和阳历的切换。这种切换功能需要与农历日历算法相结合,例如,...
在本篇内容中,我们将深入探讨如何在Android应用中实现城市级联和时间选择功能,利用滚轮选择器进行高效的数据选择。 首先,我们来看城市级联的选择。在实际应用中,可能需要用户选择国家、省份、城市这样逐级递进...
在Android开发中,...总之,Android ListView的三级联动实现地址选择器涉及到了数据结构设计、事件监听、数据加载和UI布局等多个方面。通过巧妙地组合和定制,我们可以创建出高效、用户体验良好的地址选择组件。
总结来说,"Android城市选择器"是一个高效、美观且易于集成的组件,它借助高德地图的强大功能,为开发者提供了在Android应用中实现城市选择功能的便利途径。无论你是初学者还是经验丰富的开发者,这个选择器都能帮助...