發表文章

【 Android 】利用file取得資料夾內檔案

圖片
在實作上需要取得特定目錄裡的檔案名稱以便作list使用,所以就實作了一個測試的小程式,順便作一下紀錄。 1.  先抓取要使用的資料夾路徑,並產生一個新的folder來代表實體的資料夾 private File root ; root = Environment . getExternalStoragePublicDirectory (             Environment . DIRECTORY_MUSIC ) ; String path = root . getPath () ; File folder = new File ( path ) ; 2. 再建一個過濾器,去過濾自已想要的檔案,就可以在list裡面看到自已需要的檔案了(如下圖) FilenameFilter mediafilefilter = new FilenameFilter (){ //private String[] filter = {".mp3",". ogg ",".3gp",".mp4"}; private String [] filter = { ".mp3" } ; @Override public boolean accept( File dir , String filename ) {        for ( int i = 0 ; i < filter . length ; i ++ ){ if ( filename . indexOf ( filter [ i ]) != - 1 ) return true ; } return false ; }} ; File [] list = folder . listFiles ( mediafilefilter ) ; 這裡是過濾mp3檔,所以把資料夾裡的mp3檔都選出來了。 3. 若是不要過濾,需要全部的資料,就不用實作filter的部份,只需要實作一個陣列儲存所有的檔案名稱即可。 St...

GitHub 基本操作(新增、刪除、同步)

圖片
Git是一套分散式的版本控制系統,最強大的一個特點就是可以無窮無盡的開branch(分支)。 由於目前使用者都是用mac在開發,所以下面步驟是在mac上操作使用,windows上會有略微不同。 首先先安裝Git,並註冊一個屬於自已的帳號。 Mac Download Git GitHub 1. 安裝完就會在本機產生一個git應用程式,如下畫面,就可以直接操作。 2. 在畫面底下可以看到一"+"的符號,並可以選擇要新建一個Repository(倉)或是從local選擇一個Repository,意思可以把它當作新建一個專案或是選擇本機的專案,這裡是使用選擇本機專案來當示範,選擇了一個"imagetest"的專案就會產生如同第一點的圖案一樣的畫面。 3. 再來會選擇該專案右邊有一個箭號,點選之後就會進去管理該專案,首先先選擇到Changes的頁籤,一開始不管是新建專案或是選擇本機專案都需要先在這裡將程式sync到github上,先選擇全部(將 select all打勾 )並按下右上角的Sync Branch同步到github上。 4. 接下來就可以開始進行程式開發了,如下測試,先在main上面作修改如下圖: 5. 修改的同時,也會同步到本機的git應用程式如下圖: 6. 此時若想作程式管理的動作,則到changes的頁面選擇該檔案,此處修改MainActivity則選擇該檔,在右邊會看到修改的地方,並可以上面作summary(簡介)和description(說明)。 7. 選擇完成並填入summary和description後,就先按下commit再按下右上角的sync branch,就會同步到github上,此時登入github就可以在自已的專案上看到剛才修改的文件在branch裡。 8. 接下來只要重覆上述2~7的步驟就可以管理自已的專案。 9. 若是要刪除專案,則可以在網頁上操作,如下圖,先點選該專案,並點選畫面右邊的settings 10. 進入settings的頁面後,最下面有一個Delete this respository的選項。 11. 按下後會跳出畫面,並要求操作者輸入專案的名稱以確認刪除,輸入完成...

【 Android 】Fragment

圖片
目前ECLIPSE開發的最新API版本為 19( android 4.4.2) Android是在Android 3.0 (API level 11)開始導入fragment的。 Fragment 可以將fragment想成activity中的模組,可每個fragment有自已的佈局,有自已的生命周期,而fragment的生命周期是嵌入在activity中的,意思是當activity被銷毀時,fragment也會被銷毀,所以fragment是不能單獨存在的,但一個activity可以擁有很多個fragment也可以載入或移除,當在運行時可以分別操作各個fragment。(若要詳細了解,請參考google developer ) 下列是一個簡單的fragment的範例,可以切換兩個fragment,layout的部份就不寫出來了: 1. 首先會在main activity中發現在新專案建立時,就會有一個fragment並在onCreate中載入,記住這裡是"載入"。 if ( savedInstanceState == null ) {      getSupportFragmentManager () . beginTransaction () . add ( R . id . container , new PlaceholderFragment ()) . commit () ; } 2. 實際的fragment在底下建立,在onCreateView當中將fragment的layout載入,並可以在這裡操作fragment上所有佈局的元件。 /** * A placeholder fragment containing a simple view. */ public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() { } @Override public View onCreateView( LayoutInflater inflater , ViewGroup container , Bundle ...

【 Android 】自定義listview按下時的顏色

圖片
ListView算是非常常用的一個view,所以常常有自訂項目的部份 這次因為專案需要所以試了一下自定義listview在item按下時的顏色,而不是預設的顏色, 但若是有設定背景圖案或是顏色就沒辦法有此效果。 1. 首先需要在drawable下建了一個xml檔,檔名自取但需要依照命名規則(如下圖),此處命名為"list_selector.xm" 注意在建立此檔案時,需選擇"selector",如下圖 2. 接下來在"list_selector.xml"裡可以自已的動作,此測試動作只有設定一個按下的動作而已,也可以自已其他的動作,如按住或是移動的時候。 <? xml version = "1.0" encoding = "utf-8" ?> < selector xmlns:android = "http://schemas.android.com/apk/res/android" >     < item android:drawable = "@android:color/black"             android:state_focused = "false"             android:state_pressed = "true" />     </ selector > 3. 接下來在listview的xml裡設定如下,即可以看到下列兩張圖的效果      android:background = "@drawable/list_selector"   還未按下時  按下後

【 Android 】自訂ActionBar

圖片
ActionBar 是自  Andoird 3.0(API level 11)  加入的新功能,目的在增進使用者操作介面更豐富並統一介面外觀;為了讓舊版本的 Android 也能有 ActionBar,又推出  appcompat v7  提供舊 Android 版本的 API,可往前支援到  Android 2.1( Éclair , API level 7) 。 1. 要修改actionbar的樣式可以開啟專案下的res/menu/main.xml,然後新增自已需要的action bar項目 < menu xmlns:android = "http://schemas.android.com/apk/res/android"     xmlns:app = "http://schemas.android.com/apk/res-auto"     xmlns:tools = "http://schemas.android.com/tools"     tools:context = "com.example.hwfindme.MainActivity" >     < item         android:id = "@+id/additem"         android:icon = "@drawable/add"         android:title = "Add"         app:showAsAction = "always" />   //這行需要注意,要使用app開頭     < item         android:id = "@+id/action_settings"         android:showAsAction = "always...

Android 和 iOS 開發比較

參考來源 這篇文章有討論到andrid和ios的開發所不一樣的地方,簡單的分享一下自已的心得: 1. 在開發上:     iOS : 是以圖形界面來設計,所以非常的直觀和友善,而且只有ipohe和ipad兩種大小的相容性問題而已,所以ios的設計應該是取決於美術設計人員。     andorid : 相較於iOS的相容性,安卓在設計上必需面對大小不同解析度的問題,並無法有效的解決圖形在各個解析度所造成的layout偏差問題。 2. 在獲利上:      iOS :          a. 一年需付99usd。        b. 開發軟體 -> 蘋果品管後app store 上架 ->合理價格 ->消費者買單 ->開發商賺錢 ->開發新軟體,這是ios app的獲利方式,follow一定的規則就可以獲得獲利,雖然比較麻煩而且時間較長。     andord:        a. 終身只需付25usd。        b.  market上架時,google 沒品管, market 依各國法令客製化不佳,很多地方沒有付費機制。 很多app客戶會要求開發者設計app時參考ios的設計,又同時要求需要相容很多款裝置,這個根本對設計者來說是非常大的挑戰,因為對客戶或者使用者來說,根本不知道安卓在開發上根本就是不一樣的,一眛的要與ios比較當然顯得android的差,兩者當然可以比較,但不應該要求那方應該和那方一模一樣。      這篇文章也是成功人士的心得分享,可以參考:  http://www.ithome.com.tw/node/69897     

【 Android 】Lifecycle

圖片
既然Orientation那篇有用了生命週期來講解app的流程,這裡就順便記錄一下生命週期: 在android系統的裝置通常會有"上一步"和"HOME"鍵來操作系統(以HTC new ONE為例),如下: 一、上一步         若是按下上一步,生命週期的表現如下圖: 當按下上一步的時候,程式會destroy並finish掉,若是再開啟程式則會從oncreate重新執行 二、Home        若是按下home,生命週期的表現如下圖: 當按下home的時候,程式則會先跑onstop,若是再開啟程式則是會跑restart的部份 所以在程式的處理上,在這兩個動作發生的時候,應該作不一樣的設置處理。 PS: 若是按下back鍵不想回上一頁或是關掉app,可以實作下列動作: @ Override      public   boolean  onKeyDown ( int  keyCode,  KeyEvent  event )   {                   if   ( keyCode ==  KeyEvent . KEYCODE_BACK )          {              // Show home screen when pressing "back" button,              //  so that this app won't be closed accidentally             Intent intentHome =  new  Intent ( Intent. ACTI...