顯示具有 android 標籤的文章。 顯示所有文章
顯示具有 android 標籤的文章。 顯示所有文章

2016年2月13日 星期六

用 Sketch 匯出 Android APP 的 ICON

自從有了 Sketch 之後,匯出 Ios, Android 的 app icon 確實簡單多了,而且基本的 size 都有,偷懶的時候連 photoshop, Illustrator 就都不開了,也不用自己裁圖。

其實我用 sketch 的時機很少...,真的只有跟 Mobile 有關的應用才會打開它...。

在寫這篇文章時我的 sketch 版本是:


1. 新增一個 project
『File』-> 『New From Template』-> 『Android Icon Design』

接著你會看到這樣的 Layout


2.  擺上 Logo 配置到每個區塊

預設的 Layout 的名稱是有意義的,預設的 size guide 可以看到有  mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi 等等,對應的 px,Sketch 都規劃好了,你也可以參考 http://iconhandbook.co.uk/reference/chart/android/, http://developer.android.com/intl/zh-tw/guide/practices/screens_support.html。

其實從官方的文件上看,icon 的 size 其實是蠻多的,預設的 template 只是把部分的 size 列出來讓你編輯,但我想也夠用了啦 XD。

3. 匯出 icon
選擇 File->Export。



(附帶一提: 從 File->export 會匯出 Layout 上所有的 icon 組合。如果你想要匯出單張的,可以按下單張 icon,從右下角的 Export 開始:

)


4. 選擇 Export 的路徑

File->Export 後選擇要匯出的 Slices。


全部匯出後到當時選擇的資料夾查看:

這樣就行了。另外我有把檔名換掉,因為我不需要 _APP 這個名字出現在檔名中 (當初忘記在 sketch 編輯時就改掉 :P),只是方便覆蓋現有的 icon 而已。

使用這些 icon 的方法就是1. 直接複製到 Android 專案下的 icon 圖檔路徑,像是 專案名稱/app/src/main/res/ 底下,找到對應的 hdpi 的資料夾,把 icon 複製過去就行。

另一個方法是直接對圖片做複製(ctrl+c),然後在 Android studio 到對應的 folder 按 ctrl+ V做複製,android studio 很聰明,會問你是不是要覆蓋圖片,它會幫你處理的~


其實 IOS 的 icon 也是類似的手法,如果 Sketch 預設的 size 不夠你用,就自己再補 slice 上去吧!


測試
欸.. 當然就是跑跑看摟 :P 實機或是 AVD 都跑跑看!


2016年2月12日 星期五

Android 學習筆記 glUtilsParamSize: unknow param ...

在 Android 放 WebView 時,利用 AVD 跑 app 時一直出現類似這樣的 log:
02-12 18:07:53.976 7739-7808/today.winwu.blog.demoApp E/eglCodecCommon: glUtilsParamSize: unknow param XXXXXXXX


而且是一次來好幾個.. 上網查原因 http://stackoverflow.com/questions/29450746/how-to-solve-webview-error,是因為我使用的 AVD 設定有勾選 Use GPU Host,導致 log 一直出現。換成真正的手機就沒有這個問題了...  如果很在意的話,請繼續往下看...

如果要暫時解決這個,1. 改用手機測試,就不會出現這個 log。2. 把 AVD 的 use GPU Host 暫時關掉吧... 但關掉之後也會有一些額外的 log 會出現,只是至少比 glUtilsParamSize 還要少很多行 log...


勾消 use Host GPU 之後再重新 run 一次 app 吧。(記得開回來就是..)

怎麼覺得花了二十分鐘發現這個問題,內心  囧囧的...

Android 的 SQLite 學習筆記

Android 內建可使用 SQLite 資料庫。但是 SQLite 是屬於內建在系統裡面的 Database,如果資料量不多的話,可以考慮使用。 (通常我是不太用 SQLite, 我都接 API 的比較多...,但如果不是一些很重要的資料,只打算存在該支手機上的資料,我也會用這種方式存 XD)

2016年1月29日 星期五

Android 的 SharedPreferences 學習筆記

Android 的 SharedPreferences 是一種提供 App 儲存少量資料的物件。要使用 SharedPreferences 需要 import android.content.SharedPreferences;

SharedPreferences 是用 Key, Value 的方式組成,就像我們在使用 NoSQL 一樣,key 就是鍵名,value 就是值,下面介紹增修刪讀一個 SharedPreferences 的方式 (其實就只是參考官方文件)。

建立 SharedPreferences 物件

在一個 APP 使用 SharedPreferences 儲存資料,首先要先建立起 SharedPreferences 的物件:

getSharedPreferences 變數名稱  = getSharedPreferences(String name, int MODE);

// Example 建立名為 pref 的 SharedPreferences 物件
SharedPreferences pref = getSharedPreferences("dialogAppFile", MODE_PRIVATE);

getSharedPreferences 有兩個參數,getSharedPreferences(String name, int MODE);

第一個參數  name 型別為 String,表示檔名,SharedPreferences 會去找符合檔名的 ShredPreferences,假如檔名不存在,那麼他會當你在使用 editor (SharedPreferences.edit()) 而且 commit (意思就是送出更新或是建立 key 值) 的時候建立。

因為 SharedPreferences 是 XML 檔的格式,所以只需要帶入檔名,副檔名就不需要了。

附帶一提,這裏的 Editor 是指 SharedPreferences 的 Editor 物件,要先拿到這個物件,才能寫入資料到 ShredPreferences,下面在 "寫入資料到SharedPreferences" 地方會再提到,只要先知道如果檔案不存在,它也會在操作 commit 時建立。

第二個參數雖然是 int 型別,但是值是預設的幾種常數在使用, 這裏的 MODE 指的是 operation mode,設定這個檔案的存取權限的意思,預設會是 MODE_PRIVATE (真正儲存的值是 0)。

幾種 MODE:
* MODE_PRIVATE: 只有自己這隻 APP(應用程式) 才能存取。
* MODE_WORLD_READABLE: 所有應用程式都可以讀取。(這個常數會在 API level 17 被棄用 This constant was deprecated in API level 17.)
* MODE_WORLD_WRITEABLE: 所有應用程式都可以寫入。(這個常數會在 API level 17 被棄用 This constant was deprecated in API level 17.)

所以,通常我建立的 key 值可能只跟我正在開發的 APP 有關,就可以使用 MODE_PRIVATE,也就是只有該應用程式才可以存取。


讀取/寫入資料到 SharedPreferences

假如你正在開發一支手機遊戲,你可以會希望記錄使用者目前玩到的關卡到  SharedPreferences 裡面,所以當 user 開啟 APP 時,我們會從 SharedPreferences 拿出他上一次的紀錄,當然當使用者玩到升級的時候,也就要更新 SharedPreferences 的關卡紀錄,所以,關卡紀錄就是一個 key,儲存的是當下的關卡等級。

由這段描述,先去思考怎麼拿 key 值出來。讀取資料比寫入, 移除還要容易一點,因為寫入移除資料還需要額外呼叫 Editor 物件,讀! ,只要有建立 SharedPreferences 物件,直接使用 getkey的資料型別(key值, 預設值) 就行!

假設我當初存在 SharedPreferences 的關卡等級型別是 String,key 是 gameLevel,那麼拿取 gameLevel 的方法會像:

SharedPreferences pref = getSharedPreferences("dialogAppFile", MODE_PRIVATE);
String gameLevel = pref.getString("gameLevel", "no value");

因為 gameLevel 的型別是 String,所以要用  getString(...),假如今天存的是 int,就會是 getInt(...),所以這邊的 get 有很多種 case,端看當初進去的型別是什麼。

ex: getBoolean, getFloat, getInt, getLong, getString....

第二個參數我帶入 no value,表示沒有取得到 gameLevel 這個 key 的值的話,預設回傳值就是 no value。


再來介紹寫入
寫入,寫入資料到 SharedPreferences 需要額外建立 Editor 物件:

Editor 變數名稱 = SharedPreferences 物件名稱 .edit();
SharedPreferences pref = getSharedPreferences("dialogAppFile", MODE_PRIVATE);
SharedPreferences.Editor editor =  pref.edit();

上面這一段,建立 Editor 物件並儲存在名為 editor 的變數。

用建立好的 editor,呼叫 putkey的資料型別(key值, 值),你可以一次 put 好幾組想要儲存的 key,但是 put 只是建立 key,並沒有真的儲存的動作,真正的儲存還要呼叫 commit()。

假如我要建立 username, nickname 的 key:
// put 只是寫入,並沒有真的儲存
editor.putString("username", "win wu");
editor.putString("nickname", "小win");
/*  要呼叫commit 才是真的儲存,在這邊 commit,會一次儲存前面的put  也就是 username, nickname 都會在 commit 的時候儲存  */
editor.commit();

然後要把 username 拿出來就用 getString(...):
String username = pref.getString("username", "no name");
// log 出 username 的值
Log.d("WINWU_APP_LOG", username);

假如,一直針對同一個 key 做 put,就會蓋掉舊的 (前提是記得 commit)。其實 put 也有更新的意思。


移除 Key 值
移除 key 一樣需要 Editor 物件來操作,你可以使用 remove("key值")。
editor
    .remove("username")
    .commit();
String username = pref.getString("username", "名字已不存在");
Log.d("WINWU_APP_LOG", username);


清除全部的資料
其實看到現在會發現,只要需要更動到 SharedPreferences 檔案的內容,都需要使用 Editor 物件,所以目前也只有讀取 key 值用不到 Editor。

清空 preferences 檔案裡面的 key,呼叫 clear() 然後再 commit() 就行。
editor
    .clear()
    .commit();


我的 SharedPreferences 存在哪裡?
利用程式操作 SharedPreferences 其實是有點空虛,但確實真的有這個檔案存在,格式為 XML,你可以開啟 Android Device Monitor,然後點選 File Explore,通常應用程式的資料會放在 data/data 資料夾底下,接著尋找應用程式的 applicationId 取名的資料夾。

[在 Android Studio 靠右邊的這一顆可以開啟 Android Device Monitor]

[找到 File Explore]

SharedPreferences 就放在應用程式的資料夾底下 shared_prefs/preFile.xml。

你沒有辦法直接夠過 device monitor 開啟這個檔案,但你可以把它匯出來看看,右上角找一下 icon,有個 pull a file from device。

這是 SharedPreferences  xml 的樣子,你會看到你儲存的 key 值:


End~

2016年1月19日 星期二

我最近看的一本書: Android App 程式設計教本之無痛起步


這本書的詳細資訊 (博客來)。

* 閱讀天數: 約 13 天吧!,一天不超過6小時。
* 購買時間: 1月初。
* 學習 Android 最麻煩的地方: 建置環境! (<- 如果連 JDK, android studio 都弄不起來就不用玩了...)
* 學習建議: 就算有 android 模擬器還是不夠,建議還是要有 android 的手機在身邊用。

其實我離職的這段時間真的是很盡情地看書,看了一點 Java 的皮毛就來看這本書。不過,這本書真的非常基本,但它的書名已經很童叟無欺了 :),真的是很無痛,也很好上手 (跟著步驟做,你不太有機會走丟,但是有些 typo 的地方,你可能要自己認的出來比較好...),只是說如果要再更精深一點,只看一本絕對不夠。另外前面幾章節的重點複習跟練習能做就做瞜。

適合沒有學過 Android,但是你有其他程式語言的基礎,我覺得這本書是不錯的入門,書本的教學方式比較小單元為主,一個功能或是主要的大方向都會稍微帶過。

後面章節簡短複習 Java 的附錄我覺得蠻實用的,另外 Android Stiduo 的介紹寫得不錯。

模擬器的話,在 window 上好像要多安裝一些東西,但是因為我是 Mac... 所以我沒感覺...

大概是這樣。我還有買另外一本書,用來增加對 Android 的深度跟廣度用 XD... 應該說學到基礎的 android 對我的好處在於了解一些 android app 元件的專有名詞(因為我覺得這個很重要),就好比 PM 要出去談 case,看到 UI 總是要能夠想像一下怎麼用一些 app 開發的名詞跟工程師溝通一樣。另外我只是很想感受一下刻 Android App 的 UI 的感覺 (只是目前還沒有嘗試到而已... 有點可惜XD 但也沒這麼強)。


這本書對我影響的地方...:
* android studio 的 auto complete 以及一些自動 import 的功能,都好方便,突然覺得 sublime... 好像少了什麼 XD 但是有時候 render XML 的時候卡卡的...
* 加強我對 Java 的一些觀念,像是 overloading, constructor的定義以及原來 @Override 是有意義的 :P。
*  申請 Android Developer (嚴格來說應該是『Google Play 開發人員』)要繳 25 塊美金。( 這跟 ios 上架的價位差好多啊 ... )

如果你想學 android 的一些的資源:
1. Coursera 上面有 android 的免費課程
2. udacity 也有免費課程
3. 比較有耐心的話就看文件摟! Android Developer




-end~

2016年1月7日 星期四

[Android] 筆記 手機上測試自己的 APP

本篇撰寫時的 Android Studio 為 1.5.1 版。

在開發 Android 時,測試 APP 的方式有兩種 (1) 在 android studio 時透過 AVD 執行/模擬 APP(AVD, Android Virtual Device  android 模擬器) (2) 在手機上測試自己的 APP
此篇文章暫不討論 (1) AVD 的方式。在手機上測試自己的 APP,有兩個方式:

(一) 手機 USB 接上電腦

(二) 是透過 apk 檔直接在手機上安裝應用程式並執行(透過 email 寄信)

不論 1, 2 都請你先把你手機上的『開發人員選項』打開,並且要勾選 USB 偵錯的項目。(至於怎麼開你可能要去 google 一下,以我來說是找到手機的設定的地方,在 Android 版本號的地方按七下。)

這張圖是已經開啟開發人員選項選單畫面,模式狀態請為『開』。


並且授權 USB 偵錯。





(一) 手機 USB 接上電腦
用 USB 測試的話,如果是 window 作業系統還要另外安裝手機 USB 的驅動程式 (Mac 我忘記要不要裝了 sorry ... ),如果你接上去 USB 然後 run APP 的時候沒有抓到你的 device,那可能真的要裝一下了...

安裝 USB 驅動的話請參考這篇 OEM USB Drivers。
假如你裝好了,就把你的手機以及 usb 接上電腦,在 Android Studio 的地方,執行 `run APP`。


這時候 Android Studio 會先問候你的手機是否允許偵錯:

像我的手機是三星的,在透過允許偵錯之後,你才能在 Device Chooser 找到三星的手機,假如你按取消,或是沒有回應,則選不到這個選項 (state 會變成 offline):


選擇我的手機之後,按下 OK 就能在手機上模擬 app 了。


(二) 是透過 apk 檔直接在手機上安裝應用程式並執行(透過 email 寄信)
假如你的 usb 偵錯一直有失敗,那另一種方式就是把整個 app 的 apk 檔寄給自己,透過手機收 emai 的方式把 apk 下載下來。

至於 apk 檔在哪裡呢,尋找目錄底下,他在 app/build/outputs/apk/app-debug.apk

你可以把這個 apk 複製出來,換個檔名。另外如果你有修改 app 的程式,也請記得重新 build 專案才會同步這個 apk。

使用你的 email 把這個 apk 夾帶在信件中,寄給自己,然後透過手機收信,並下載 apk,流程如下:









如果未曾允許過的話要記得允許安裝的權限,安裝完成後就會在手機的 APP 列表找到他。

2016年1月6日 星期三

[Android 筆記] 設定 ImageView 的圖檔來源

在 Android 顯示圖片,如果是用自己客製的圖片,檔案要放在 app/res/drawable/ (以 Anrdoid 的目錄來說) 底下。(檔名切記不能用中文字)

新增 ImageView 的方式從 Widget 拖到畫面你要擺置的地方: (在此使用 AndroidStudio)

接著選擇圖片的來源,src 怎麼填呢?
(1) 如果是你是用自己提供的圖片,那就是 @drawable/圖檔名稱不含副檔名
(2) 如果你是用系統預設的圖片,那就是 @android:drawable/XXXX  (ex: @android:drawable/sym_action_email)

通常如果是選擇系統預設圖片不會自己手 key src 的屬性,你可以用介面選取。

你可以點擊剛剛新增的 ImageView 打開編輯視窗,在 src 的地方選取 "..." 打開資源介面去找你的檔案:


選擇你的圖檔: (基本上選取自己新增的圖片,路徑從 Project 的 Tab 開始找; 反之如果是要系統預設的圖片,用 System 的 Tab 開始找)




以我這張圖片來說,我的檔名是 test.jpg,這個 ImageView 的 src 屬性是 @drawable/test (@drawable/檔案名稱不含副檔名)。

另外也能透過 coding 的方式設定 ImageView 的顯示圖片 (資源),Example:

// 宣告 ImageView
ImageView img1 = (ImageView) findViewById(R.id.XXXX);

// 範例: 如果是要設定內建的圖片
img.setImageResource(android.R.drawable.顯示內建圖片的名稱);

// 範例: 如果是專案自己的圖片
img.setImageResource(R.drawable.圖檔名稱不含副檔名);

假如是要讀取手機的相簿,請另外參考 setImageBitmap()。


圖片的 Visibility 屬性
ImageView 可透過 visibility 設定圖片的可視程度:
* visible 可視 (預設情況)。
* gone 看不到,也不會佔空間。
* invisible 看不到,但是會佔住原本擁有的寬高屬性。

程式設定 visibility 則是 setVisibility(參數)。參數可以是 VIEW.VISIBLE, VIEW.INVISIBLE, VIEW.GONE。



* 關於 Android ImageView 官方文件
* 圖片的顯示大小用 width, height 控制,值可以指定 dp 值或是 wrap_content, match_parent。
* 圖片的縮放規則則是要參考 scaleType,但要注意有些屬性值可能會裁切到原圖的顯示範圍。

2015年11月20日 星期五

Mac 安裝 JDK 的路徑

剛剛在跑 android studio 的時候
那個 JDK 的位子一直說我只有 jdk 1.6.0
但我裝了 jdk 1.7.0, 1.8.0  都沒有看到
原來是目錄錯了...
因為它裝在  /Library/Java/JavaVirtualMachines 目錄下
而 Mac 本身就有裝 Java,天生安裝好的 Java 路徑是在  /System/Library/Java/JavaVirtualMachines

所以,指定目錄的時候,不要跑錯地方,不是沒裝好 JDK...

2011年11月27日 星期日

android,序

Google在2005併購android,當時的android才成立22個月。google在07發表android第一個版本,當時還沒有非常受到矚目。現在好像已經出到4.多了吧?! 而且每個版本都是用甜點命名。
android,droid是機器人的意思,an一個,android中文就是"機器人",android他本身就是個作業系統,以Linux為核心,主要的陣營非常多,像台灣的HTC就是android其中的一個陣營,LG. 三星也都是。簡單來講,現在最為人知的兩大智慧型手機作業平台,一個就是iphone的,另一個就是google的android,兩者的差異就在於,iphone的開發應該算是封閉式的,而android完全免費而且開放,即便如此,iphone在全世界的市占率,仍然很高。


由智慧型手機的崛起,軟體的開發與創新逐漸變成主流。大家會發現,其實呢智慧型手機的外觀設計,各家廠商的設計其實沒有差多少,消費者的重點雖然還是會注重手機本身的設計,但是其實購買手機的重心與欲望越來越越往手機本身的作業平台為選擇目標。 重點不在於手機的外觀設計,而是手機所使用的作業平台,使用者介面設計的好壞。

這麼說來,台灣應該更注重設計人才的培養,我所指的設計是泛指所有種類的設計師...。台灣的教育習慣將藝術與科技分開,這樣的走向若要培養了解視覺設計和軟體的工程師是很困難的,若一直代工下去.....,似乎沒有多大的好處.....,所以我們要改變。



chapter 1 .2  筆記 :
android的主流開發環境是 eclipse + ADT + android SDK 
在電腦要開發android: JDK+Eclipse+Android sdk+ ADT
(看起來很複雜,沒錯!我也看不懂xd)



main.java 是android應用程式的主程序檔,相當於web程式的主頁面
main.xml在layout子選單裡,是一個XML的佈局檔,這個檔案指定了程式中顯示的元件還有相關的資訊。通常我們在手機裡看到的按鈕,就是一種元件,所以說...要加入按鈕,就必須打開main.xml進行配置
(ps: xml檔案中的標籤指定id時必須是這樣的格式: @+id/somestringvalue (somestringvalue表示id的值,以數字表是),而@+語法表示如果ID值在R.id類別中不存在,則新產生一個與ID同名的變數


android開發的資源全放在apk檔案裡,
在一個專案的子目錄中,我們會看到res這個子目錄
res裡又包含了drawable. layout. values
這三個子資料夾又包含icons.png main.xml. string.xml
由icons.png暗示著我們drawable這個資料夾是來放圖片的(影像檔)
而layout從字面上就可以知道這個資料夾是用來設定佈局,有點像是在配置畫面
values資料夾裡的xml檔可見是用來保存字串資源的(這個我也沒看懂xddd )



上面已經得知了三種資源,複習一下分別是res子資料夾drawable. layout.values
重點是,資源,不只這些。總之,不管是甚麼樣的資源檔案,都會被放到res這個子資料夾中
(注意,在drawable不能放同名的影像檔,就連apple.jpg與apple.png這樣就不行。這是因為在生成ID的時候本來的設計就沒有考慮到附檔名的問題)




android有四種元件 :
1.活動元件(activity)
2.服務元件(service)
 3.廣播接收者(Broadcast receivers)
4.內容提供者(content providers)

活動元件(activity) 這是android最核心的類別,全名android.app.Activity 
Activity相當於表單(form)或是web程式頁面 每個activity提供一個視覺化的區域,在這個區域可以放任何的android元件,像是button~ 所以才說~activity真的是開發android最核心的類別!
一個具備介面的android可以是由好幾個或一個的activity組成,比方說,我們最常的看的典型設計,就是用一個activity做為主activity(相當於首頁(主表單))經由這個actovity夠過功能表或是按鈕轉到其他的activity,每個activity都有一個小視窗,通常都是布滿整個螢幕的





Vue multiselect set autofocus and tinymce set autofocus

要在畫面一進來 focus multiselect 的方式: 參考: https://jsfiddle.net/shentao/mnphdt2g/ 主要就是在 multiselect 的 tag 加上 ref (例如: my_multiselect), 另外在 mounted...