1. 程式人生 > >仿原生安卓檔案管理器

仿原生安卓檔案管理器

仿照安卓原生自帶的檔案管理器開發,這裡只是簡單寫了個demo,依據現有程式碼可以很輕鬆實現後續開發,效果圖如下:


首先新建一個listview_item,學過介面卡的同學應該都知道一會要這是幹什麼的,就是為了繪製每個列表項的介面,這裡採用圖示+檔名

listview_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    
    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    
    <TextView 
        android:id="@+id/name"
        android:textSize="25sp"
        android:layout_marginLeft="10dp"
        android:layout_gravity="center_vertical"
        android:textColor="#080808"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
        
    

</LinearLayout>

然後開始著手寫我們的主介面佈局,兩層LinearLayout的巢狀

activity_main.xml

<LinearLayout 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:orientation="vertical"
    tools:context="com.example.filemanagerdemo.MainActivity" >
    

  <LinearLayout 
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal">
      
      <Button 
          android:id="@+id/parent"
          android:text="返回"
          android:background="#00EE76"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"/>
      
      <TextView 
          android:id="@+id/textview"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_weight="1"/>     
  </LinearLayout>
  
  <ListView 
      android:layout_width="wrap_content"
      android:layout_height="0dp"
      android:layout_marginTop="3dp"
      android:id="@+id/listview"
      android:dividerHeight="1dp"
      android:layout_weight="1">
  </ListView>

</LinearLayout>

好了,現在靜態的介面都已經準備好了,下面開始最關鍵的主Activity的程式碼講解

MainActivity.java

<span style="font-size:18px;">package com.example.filemanagerdemo;

import java.io.File;
import java.io.IOException;
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.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends Activity {

	private Button parent ;
	private ListView listview ;
	private TextView textview ;
	private File currentParent ;    //記錄當前檔案的父資料夾
	private File[] currentFiles ;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		init() ;
	}


	/*
	 * 初始化控制元件
	 */
	private void init() {
		// TODO Auto-generated method stub
		this.parent = (Button)findViewById(R.id.parent) ;
		this.listview = (ListView)findViewById(R.id.listview) ;
		this.textview = (TextView)findViewById(R.id.textview) ;
		File root = new File(Environment.getExternalStorageDirectory().getPath()) ;
		if(root.exists()) {
			currentParent = root ;
			currentFiles = root.listFiles() ;
			inflateListView(currentFiles) ;
		}
		this.parent.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				try {
					if(!currentParent.getCanonicalFile().equals(Environment.getExternalStorageDirectory().getPath())) {
						currentParent = currentParent.getParentFile() ; //獲取上級目錄
						currentFiles = currentParent.listFiles() ;             //取得當前層所有檔案
						inflateListView(currentFiles);                             //更新列表
					}
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});

		this.listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				//如果點選的是檔案,不做任何處理
				if(currentFiles[position].isFile()) {
					return ;
				}
				File[] temp = currentFiles[position].listFiles() ;
				if(temp == null || temp.length == 0) {
					Toast.makeText(getApplicationContext(), "此資料夾不可用或者資料夾為空",Toast.LENGTH_LONG).show(); ;
					return ;
				}
				currentParent = currentFiles[position] ;
				currentFiles = temp ;
				inflateListView(currentFiles);

			}
		}) ;
	}




	/*
	 * 更新listview
	 */
	private void inflateListView(File[] files) {
		// TODO Auto-generated method stub
		List<Map<String,Object>> list = new ArrayList<Map<String, Object>>() ;
		for(int i = 0 ;i<files.length ;i++) {
			Map<String,Object> item= new HashMap<String, Object>() ;
			if(files[i].isDirectory()) {
				item.put("icon", R.drawable.folder) ;
			}else {
				item.put("icon", R.drawable.file) ; //這裡可以寫成根據具體的檔案型別新增不同的圖示
			}
			item.put("name", files[i].getName()) ;
			list.add(item) ;
		}
		SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(),list,R.layout.listview_item, new String[]{"icon","name"}, new int[]{R.id.icon,R.id.name}) ;
		this.listview.setAdapter(adapter);
		try{  
			textview.setText(currentParent.getCanonicalPath());  
		}catch (IOException e){  
			e.printStackTrace();  
		}  
	}
}
</span>

   從onCreate開始閱讀,程式碼應該不難。Ok,一個仿安卓原生系統的檔案管理器demo就開發完畢,這個demo為了能讓大家看的清晰,我用了很不規範的書寫習慣,比如字串應該放進string.xml  ,顏色也最好不要直接使用RGB編碼,應該在value下新建color.xml給這個RGB編碼指定一個名字。這裡為了原理講解清晰,我全部使用了硬編碼,還有就是我獲取SD卡根目錄的方式太簡單粗暴,正常應該專門寫一個方法來判斷各種異常情況,比如判斷有沒有SD卡或當前SD卡是否可用,否則一旦使用者執行一點異常操作,我們的程式就崩了,這就是正式專案與demo的區別吧。

OK that is all,有錯誤之處,希望瀏覽者能不吝指正。

微笑覺得還不錯的話歡迎點一下下面的

頂!

d=====( ̄▽ ̄*)b

或者

 oooO ↘┏━┓ ↙ Oooo
 ( 踩)→┃你┃ ←(死 )
  \ ( →┃√┃ ← ) /
  \_)↗┗━┛ ↖(_/

相關推薦

仿原生檔案管理

仿照安卓原生自帶的檔案管理器開發,這裡只是簡單寫了個demo,依據現有程式碼可以很輕鬆實現後續開發,效果圖如下: 首先新建一個listview_item,學過介面卡的同學應該都知道一會要這是幹什麼的,就是為了繪製每個列表項的介面,這裡採用圖示+檔名 listvie

檔案管理開啟指定目錄

File destDir = new File(getApplicationContext().getExternalCacheDir()+"//eml"); Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

檔案管理-ListView實現

今天覆習一下ListView實現安卓檔案管理器,包括檔案的篩選、apk的安裝,以及BaseAdapter的應用等。 直接上程式碼: 應用實現部分 public class MainActivity extends ListActivity {

Android TimePickerDialog(原生時間選擇

這個控制元件說實話之前沒用過原生的,都是用的自定義的,其實這個也挺好看的。 public class MainActivity extends AppCompatActivity { private Calendar c; @Override prot

MP3播放開發實例(3)之進度條和歌詞更新的實現

tac run detail datetime style mem poll() arc call 上一次談了音樂播放的實現,這次說下最復雜的進度條和歌詞更新。因為須要在播放的Activity和播放的Service間進行交互,所以就涉及了Activi

多媒體播放的開發

lis list 媒體 ongl .com ava aid 多媒體 http JaVa%E5%8F%8D%E5%B0%84%E6%9C%BA%E5%88%B6%E5%AE%9E%E7%8E%B0%E5%8F%8A%E5%8E%9F%E7%90%86 http://musi

傳感基礎

ports htm div 有效 type() 0ms 類型 event pan 基礎部分 傳感器類型 動作傳感器 這類傳感器在三個軸(X、Y、Z)上測量加速度和旋轉角度。包括如下幾個傳感器。 加速(accelerometer)傳感器 陀螺儀(gyroscope)傳感器 重

ShopNC Android 好商城原生客戶端源碼項目

安裝 程序 .com 管理 截圖 red 客服系統 報錯 客戶端源碼 # ShopNc Android 警告:本開源程序作者:MapStory,聯系QQ:1002285057,交流群:492184679,禁止任何未授權商用! 基於好商城V5.6的Android客戶端,目

管理Activity

安卓中一般在BaseActivity 管理所有的Activity 因為所有的Activity 繼承自BaseActivity 步驟: 1:在BaseActivity New 一個ArrayList 儲存Activity private List<Activity> allA

搭建開源的web檔案管理(eXtplorer)

下載: wget https://extplorer.net/attachments/download/77/eXtplorer_2.1.11.zip 解壓: unzip eXtplorer_2.1.11.zip -d extplorer 複製到站點根目錄: \cp -a extpl

VDVESTA一鍵安裝指令碼-VESTACP-PHP7.1-檔案管理-vDDoSProxy

VDVESTA一鍵部署script/VESTACP/PHP7.1/檔案管理器/vDDoS Proxy 簡介 VDVESTA是一個小型的shellscript,為您的CentOS7 x86_64主動定製並部署VESTACP面板,與官方面板不同的是,此script支援php7。並增加了需付費使用的檔案管理面板

寫一個簡單的網站檔案管理

一時不知道從何說起了,網站檔案管理器滿天飛的,所以,純粹是閒的蛋疼,才會做這個,對於我來說,這就是打遊戲。 1.仿win7介面 2.仿win7操作 3.上傳,下載,分享檔案,這麼說起來,就像是一個個人網盤了。 製作過程有點懶得說了,目前是做到可以瀏覽檔案,切換目錄這樣 用我的Vue元件載入做的,

推薦一款最好用的windows檔案管理

在日常生活或工作中,除了一些文字編輯工具以及網頁瀏覽器以外,我們接觸的最多的可能就是資源管理器了。資源管理器軟體有很多。如:   Clover 、QTTabBar、FreeCommander、WindowsTabs、Q-Dir、Total Commander等  

_035_Android_Android studio3.0開啟Device File Explore(檔案管理)的方法(圖文教程)

轉自https://blog.csdn.net/xiayiye5/article/details/79002921,感謝作者的無私分享。  方法一: 點選 View > Tool Windows > Android Profiler (還可以點

循序而漸進,熟讀而精思——優麒麟檔案管理

自上次發表“自是年少,韶華傾負 ——優麒麟-系統入門篇”教程之後,小編就消失快幾個月了,不過小編沒有偷懶喲,而是參與18.10的UKUI主題管理及釋出派對去了。So,小編應該算比較勤快的,你看,今天又來寫第二篇“優麒麟檔案管理器”,現在跟我一起來認識這個管理工具吧。 華味慚初識,新聲喜盡聞——檔

視訊播放——ijkPlayer(Bilibili開源)

作為一個B站(Bilibili)使用者,特別喜歡B站的播放器 湊巧,發現了b站的github的地址。。嘿嘿。。B站github地址f 發現了ijkplayer播放器,支援android 和ios 我們用AndroidStudio新建project名字是bilibili_ijkplay

刪除Win10檔案管理中的文件音樂視訊OneDrive快速訪問等

一、刪除Win10檔案管理器中的文件/音樂/視訊等在Windows 10下開啟這臺電腦,除了會顯示磁碟碟符外,在資源管理器上半部分還會顯示6個資料夾,這6個資料夾就像6個核桃一樣,對一些人有用,對一些人沒有用。有些強迫症的童鞋表示不能忍受,下面介紹怎樣刪除這幾個資料夾。環境:Windows10專業版開啟登錄檔

RE檔案管理下載|RE檔案管理免費下載

re管理器是我很喜歡的一款功能強大的高許可權檔案管理器,可以利用它刪除手機自帶的不必要軟體,從而提高系統的執行速度,非常的好用。RE檔案管理器下載連結應用簡介RE檔案管理器是一款非常強的的檔案管理工具,該軟體需要RE管理器ROOT的許可權,新建資料夾,檢視/編輯檔案,軟體安裝,如果你的手機已經Root過了並且

視訊播放

  磨洋工磨了好久,終於決定開始寫視訊播放器了,嗯,相簿播放器那裡,就是典型的舊坑未填,又挖新坑,233.再辭給自己立一個flag,一個月之後就要完成基本上的功能,比如基本的顯示,自動播放了,上一個下一個,暫停開始,拖拉,視訊列表。嗯,其他的慢慢來,總是要有個目標的,都沒人管

File Cabinet Pro for Mac(Mac選單欄檔案管理) V6.7.1(2.7.9)破解版

File Cabinet Pro for Mac是Mac平臺上一款非常簡潔的Mac選單欄檔案管理器,File Cabinet Pro Mac破解版不僅僅是一個選單欄檔案管理軟體,它還內建了文字編輯器、pdf檢視器、影象檢視器和媒體播放器等小功能,功能非常的強大。 File Cabinet Pro