編輯:高級開發
Java代碼 收藏代碼
1. package lee.sdcard;
2.
3. import Java.io.File;
4. import Java.util.ArrayList;
5. import Java.util.HashMap;
6. import Java.util.List;
7. import Java.util.Map;
8. import android.app.Activity;
9. import android.os.Bundle;
10. import android.os.Environment;
11. import android.view.VIEw;
12. import android.widget.AdapterVIEw;
13. import android.widget.GridVIEw;
14. import android.widget.ListVIEw;
15. import android.widget.SimpleAdapter;
16. import android.widget.TextVIEw;
17. import android.widget.Toast;
18. import android.widget.AdapterVIEw.OnItemClickListener;
19.
20. public class MainActivity extends Activity {
21. private ListView listVIEw; //文件目錄ListVIEw
22. private GridVIEw toolbarGrid; //工具條
23. private TextVIEw title; //標題-路徑
24. private List fileName=null; //文件名稱
25. private List fileNum=null; //記錄文件大少或者有多少個子目錄
26. private List filePath=null; //文件路徑
27. private List isFile=null; //是否文件夾
28.
29. private boolean flag = true;
30. private String sdCardPath; //SD卡根路徑
31. private String parentPath; //路徑的上級
32.
33. /** 底部菜單圖片 **/
34. int[] menu_toolbar_image_array = {
35. R.drawable.menu_paste,
36. R.drawable.controlbar_back,
37. R.drawable.menu_penselectmodel,
38. R.drawable.menu_quit };
39.
40. /** 底部菜單文字 **/
41. String[] menu_toolbar_name_array = { "主目錄", "返回", "確定", "退出" };
42.
43.
44. public void toast(String msg){
45. Toast.makeText(this, msg, 1).show();
接上頁
46. }
47.
48. @Override
49. public void onCreate(Bundle savedInstanceState) {
50. super.onCreate(savedInstanceState);
51. setContentVIEw(R.layout.main);
52.
53.
54. if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
55.
56. toast("Sd卡不存在");
57. }
58. sdCardPath=Environment.getExternalStorageDirectory().getPath();
59.
60. // File fff=new File(sdCardPath+"/test/ddd");
61. // if(!fff.exists())fff.mkdirs();
62.
63.
64. listView=(ListView) findViewById(R.id.list_vIEw);
65. title=(TextView) findVIEwById(R.id.title2);
66.
67.
68. getFileDir(sdCardPath);
69.
70.
71.
72.
73. // 創建底部菜單 Toolbar
74. toolbarGrid = (GridView) findViewById(R.id.filedir_toolbar); //獲取底部的GridVIEw控件
75. toolbarGrid.setNumColumns(4); // 設置每行列數
76.
77. toolbarGrid.setAdapter(getMenuAdapter(menu_toolbar_name_array,menu_toolbar_image_array));// 設置菜單Adapter。調用getMenuAdapter方法構造MAP參數
78.
79. /** 監聽底部菜單選項 **/
80. toolbarGrid.setOnItemClickListener(new OnItemClickListener() {
81. public void onItemClick(AdapterView arg0, VIEw arg1, int arg2,long arg3) {
82. switch (arg2) {
83. case 0: //首頁
84. getFileDir(sdCardPath);
85. break;
86.
87. case 1: //返回
88. getFileDir(parentPath);
89. title.setText("路徑:"+parentPath);
90. break;
91. case 2:
92. // TODO Auto-generated method stub
93.
94.
95. break;
96. case 3:
97. MainActivity.this.finish();
接上頁
98. break;
99. }
100. }
101. });
102.
103.
104.
105.
106.
107.
108. }
109.
110. /**
111. * 構造菜單Adapter
112. * @param menuNameArray 名稱
113. * @param imageResourceArray 圖片
114. * @return SimpleAdapter
115. */
116. private SimpleAdapter getMenuAdapter(String[] menuNameArray,int[] imageResourceArray) {
117. ArrayList> data = new ArrayList>();
118. for (int i = 0; i < menuNameArray.length; i++) {
119. HashMap map = new HashMap();
120. map.put("itemImage", imageResourceArray[i]);
121. map.put("itemText", menuNameArray[i]);
122. data.add(map);
123. }
124. SimpleAdapter simperAdapter = new SimpleAdapter(
125. this, //上下文
126. data, //數據源
127. R.layout.item_menu, //綁定的視圖
128. new String[] { "itemImage", "itemText" }, //綁定數據源對應的標題
129. new int[] { R.id.item_image, R.id.item_text }); //綁定視圖對應的控件
130. return simperAdapter;
131. }
132.
133. /**
134. * 獲取路徑的子目錄列表
135. * @param path 路徑
136. */
137. private void getFileDir(String path) {
138.
139. File f = new File(path); //建立文件
140. if(!path.equals(sdCardPath)){ //判斷文件是否SD卡根路徑
141. parentPath = f.getParent(); //如果不是根路徑就獲取該路徑的上級路徑
142. }else
143. parentPath = sdCardPath; //如果是根路徑就
144.
145.
146.
147. //初始化存放個數據的List
148. fileName = new ArrayList();
149. fileNum = new ArrayList();
150. filePath = new ArrayList();
接上頁
151. isFile = new ArrayList();
152.
153.
154. File file=new File(path); //獲取接收進來的路徑
155. int fileSize = file.list().length; //獲取路徑一共有多少個子文件
156.
157. //第一次遍歷存放文件夾
158. for(int i=0;i< p>
159. File fileChild=new File(path, file.list()[i]); //定義子文件
160. if(fileChild.isDirectory() && !fileChild.isHidden()){ //判斷子文件是否文件夾並且不是隱藏文件
161. fileName.add(fileChild.getName()); //獲取子文件的名稱
162. fileNum.add(String.valueOf(fileChild.list().length)+"個子文件"); //獲取子文件裡面有幾個子文件
163. filePath.add(fileChild.getPath()); //獲取子文件的路徑
164. isFile.add(true); //標記是否文件夾
165. }
166. }
167.
168. //第2次遍歷放圖片文件
169. for(int i=0;i< p>
170. File fileChild=new File(path, file.list()[i]);
171. if(fileChild.getName().endsWith(".jpg")){ //判斷後綴是圖片
172. fileName.add(fileChild.getName());
173. fileNum.add(String.valueOf(formatSize(fileChild.length()))); //格式化圖片大少,顯示KB/MB/GB
174. filePath.add(file.getPath());
175. isFile.add(false);
176. }
177. }
178.
179.
180. String[] str={"fileImage","fileName","isFileImage","fileNum","filePath"};
181. List
182. for(int i=0;i< p>
183. Map map =new HashMap();
184.
185. map.put("fileName", fileName.get(i));
186. map.put("filePath", filePath.get(i));
187. map.put("fileNum", fileNum.get(i));
188.
189. //判斷是文件夾還是圖片,顯示不同的圖片
190. if(isFile.get(i)){
191. map.put("fileImage", R.drawable.image_folder);
接上頁
192. map.put("isFileImage", R.drawable.list_icon);
193. }else if(fileName.get(i).endsWith(".jpg")){
194. map.put("fileImage", R.drawable.imagefile);
195. map.put("isFileImage", R.drawable.list_icon);
196. }
197. list.add(map);
198. }
199.
200.
201. SimpleAdapter adapter=new SimpleAdapter(MainActivity.this,
202. list,
203. R.layout.filedir_item,
204. str,
205. new int[]{R.id.item_image,R.id.item_name,R.id.item_icon,R.id.item_num});
206.
207. listVIEw.setAdapter(adapter);
208.
209. listVIEw.setOnItemClickListener(new OnItemClickListener() {
210.
211. @Override
212. public void onItemClick(AdapterView parent, View vIEw,int position, long id) {
213.
214. Map map=(Map) parent.getItemAtPosition(position); // 獲取點擊的Item所綁定的數據
215. getFileDir(map.get("filePath").toString()); //獲取點擊文件夾路徑
216. title.setText("路徑:"+map.get("filePath").toString()); //設置標題文字
217. }
218. });
219. }
220.
221.
222.
223. /**
224. * 格式化文件大少,顯示KB/MB/GB
225. * @param size
226. * @return 返回格式化的字符串
227. */
228. private String formatSize(long size) {
229. long SIZE_KB = 1024;
230. long SIZE_MB = SIZE_KB * 1024;
231. long SIZE_GB = SIZE_MB * 1024;
232.
233. if(size < SIZE_KB) {
234. return String.format( "%d B" , (int) size);
235. } else if(size < SIZE_MB) {
236. return String.format( "%.2f KB" , (float)size / SIZE_KB);
237. } else if(size < SIZE_GB) {
238. return String.format( "%.2f MB" , (float)size / SIZE_MB);
接上頁
239. } else {
240. return String.format( "%.2f GB" , (float)size / SIZE_GB);
241. }
242. }
243.
244.
245.
246.
247. // @Override
248. // public boolean onKeyDown(int keyCode, KeyEvent event) {
249. // if(keyCode==KeyEvent.KEYCODE_BACK){
250. // if(parentPath!=null)
251. // getFileDir(parentPath);
252. // return true;
253. // }
254. //
255. //
256. // return super.onKeyDown(keyCode, event);
257. // }
258. }
package lee.sdcard;
import Java.io.File;
import Java.util.ArrayList;
import Java.util.HashMap;
import Java.util.List;
import Java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.VIEw;
import android.widget.AdapterVIEw;
import android.widget.GridVIEw;
import android.widget.ListVIEw;
import android.widget.SimpleAdapter;
import android.widget.TextVIEw;
import android.widget.Toast;
import android.widget.AdapterVIEw.OnItemClickListener;
public class MainActivity extends Activity {
private ListView listView; //文件目錄ListVIEw
private GridVIEw toolbarGrid; //工具條
private TextVIEw title; //標題-路徑
private List fileName=null; //文件名稱
private List fileNum=null; //記錄文件大少或者有多少個子目錄
private List filePath=null; //文件路徑
private List isFile=null; //是否文件夾
private boolean flag = true;
private String sdCardPath; //SD卡根路徑
private String parentPath; //路徑的上級
/** 底部菜單圖片 **/
int[] menu_toolbar_image_array = {
接上頁
R.drawable.menu_paste,
R.drawable.controlbar_back,
R.drawable.menu_penselectmodel,
R.drawable.menu_quit };
/** 底部菜單文字 **/
String[] menu_toolbar_name_array = { "主目錄", "返回", "確定", "退出" };
public void toast(String msg){
Toast.makeText(this, msg, 1).show();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentVIEw(R.layout.main);
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
toast("Sd卡不存在");
}
sdCardPath=Environment.getExternalStorageDirectory().getPath();
// File fff=new File(sdCardPath+"/test/ddd");
// if(!fff.exists())fff.mkdirs();
listView=(ListView) findViewById(R.id.list_vIEw);
title=(TextView) findVIEwById(R.id.title2);
getFileDir(sdCardPath);
// 創建底部菜單 Toolbar
toolbarGrid = (GridView) findViewById(R.id.filedir_toolbar); //獲取底部的GridVIEw控件
toolbarGrid.setNumColumns(4); // 設置每行列數
toolbarGrid.setAdapter(getMenuAdapter(menu_toolbar_name_array,menu_toolbar_image_array));// 設置菜單Adapter。調用getMenuAdapter方法構造MAP參數
/** 監聽底部菜單選項 **/
toolbarGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView arg0, VIEw arg1, int arg2,long arg3) {
switch (arg2) {
case 0: //首頁
getFileDir(sdCardPath);
break;
case 1: //返回
getFileDir(parentPath);
title.setText("路徑:"+parentPath);
break;
case 2:
// TODO Auto-generated method stub
break;
case 3:
MainActivity.this.finish();
break;
}
}
接上頁
});
}
/**
* 構造菜單Adapter
* @param menuNameArray 名稱
* @param imageResourceArray 圖片
* @return SimpleAdapter
*/
private SimpleAdapter getMenuAdapter(String[] menuNameArray,int[] imageResourceArray) {
ArrayList> data = new ArrayList>();
for (int i = 0; i < menuNameArray.length; i++) {
HashMap map = new HashMap();
map.put("itemImage", imageResourceArray[i]);
map.put("itemText", menuNameArray[i]);
data.add(map);
}
SimpleAdapter simperAdapter = new SimpleAdapter(
this, //上下文
data, //數據源
R.layout.item_menu, //綁定的視圖
new String[] { "itemImage", "itemText" }, //綁定數據源對應的標題
new int[] { R.id.item_image, R.id.item_text }); //綁定視圖對應的控件
return simperAdapter;
}
/**
* 獲取路徑的子目錄列表
* @param path 路徑
*/
private void getFileDir(String path) {
File f = new File(path); //建立文件
if(!path.equals(sdCardPath)){ //判斷文件是否SD卡根路徑
parentPath = f.getParent(); //如果不是根路徑就獲取該路徑的上級路徑
}else
parentPath = sdCardPath; //如果是根路徑就
//初始化存放個數據的List
fileName = new ArrayList();
fileNum = new ArrayList();
filePath = new ArrayList();
isFile = new ArrayList();
File file=new File(path); //獲取接收進來的路徑
int fileSize = file.list().length; //獲取路徑一共有多少個子文件
//第一次遍歷存放文件夾
for(int i=0;i< p>
File fileChild=new File(path, file.list()[i]); //定義子文件
if(fileChild.isDirectory() && !fileChild.isHidden()){ //判斷子文件是否文件夾並且不是隱藏文件
fileName.add(fileChild.getName()); //獲取子文件的名稱
接上頁
fileNum.add(String.valueOf(fileChild.list().length)+"個子文件"); //獲取子文件裡面有幾個子文件
filePath.add(fileChild.getPath()); //獲取子文件的路徑
isFile.add(true); //標記是否文件夾
}
}
//第2次遍歷放圖片文件
for(int i=0;i< p>
File fileChild=new File(path, file.list()[i]);
if(fileChild.getName().endsWith(".jpg")){ //判斷後綴是圖片
fileName.add(fileChild.getName());
fileNum.add(String.valueOf(formatSize(fileChild.length()))); //格式化圖片大少,顯示KB/MB/GB
filePath.add(file.getPath());
isFile.add(false);
}
}
String[] str={"fileImage","fileName","isFileImage","fileNum","filePath"};
List
for(int i=0;i< p>
Map map =new HashMap();
map.put("fileName", fileName.get(i));
map.put("filePath", filePath.get(i));
map.put("fileNum", fileNum.get(i));
//判斷是文件夾還是圖片,顯示不同的圖片
if(isFile.get(i)){
map.put("fileImage", R.drawable.image_folder);
map.put("isFileImage", R.drawable.list_icon);
}else if(fileName.get(i).endsWith(".jpg")){
map.put("fileImage", R.drawable.imagefile);
map.put("isFileImage", R.drawable.list_icon);
}
list.add(map);
}
SimpleAdapter adapter=new SimpleAdapter(MainActivity.this,
list,
R.layout.filedir_item,
str,
new int[]{R.id.item_image,R.id.item_name,R.id.item_icon,R.id.item_num});
listVIEw.setAdapter(adapter);
listVIEw.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View vIEw,int position, long id) {
Map map=(Map) parent.getItemAtPosition(position); // 獲取點擊的Item所綁定的數據
接上頁
getFileDir(map.get("filePath").toString()); //獲取點擊文件夾路徑
title.setText("路徑:"+map.get("filePath").toString()); //設置標題文字
}
});
}
/**
* 格式化文件大少,顯示KB/MB/GB
* @param size
* @return 返回格式化的字符串
*/
private String formatSize(long size) {
long SIZE_KB = 1024;
long SIZE_MB = SIZE_KB * 1024;
long SIZE_GB = SIZE_MB * 1024;
if(size < SIZE_KB) {
return String.format( "%d B" , (int) size);
} else if(size < SIZE_MB) {
return String.format( "%.2f KB" , (float)size / SIZE_KB);
} else if(size < SIZE_GB) {
return String.format( "%.2f MB" , (float)size / SIZE_MB);
} else {
return String.format( "%.2f GB" , (float)size / SIZE_GB);
}
}
// @Override
// public boolean onKeyDown(int keyCode, KeyEvent event) {
// if(keyCode==KeyEvent.KEYCODE_BACK){
// if(parentPath!=null)
// getFileDir(parentPath);
// return true;
// }
//
//
// return super.onKeyDown(keyCode, event);
// }
}
Google於2007年底正式發布了android SDK, 作為 android系統的重要特性,Dalvik虛擬機也第一次進入了人們的視野。它對內存的高效使用,和在低
Action bar及Dashboard能在大多數android程序項目中為用戶提供界面設計圖案。Dashboard項目組已經開始著手於一個項目,以幫助開發者們更快地使
理解布局對於良好的android程序設計來說很重要。在這個教程中,你將學習到所有關於線性布局的東西,它在屏幕上垂直地或水平地組織用戶界面控件或者小工具。使用得當,線性布
可以安裝在用戶設備上的不同版本的SDK。對於android1.5或以上版本,有兩個可用的平台: android Open Source Project 和 Google