2018年1月9日 星期二

[Android] 全螢幕載入畫面(splash screen)不要有Actionbar

問題:
我想做一個全螢幕載入畫面(splash screen)不要有Actionbar,但Android Studio預設的畫面都有Actionbar怎辦?

處理:Google 「android no actionbar」

參考:NoActionBar、上下變色

解法:

  • 對要當載入畫面(splash screen)的Activity,在Manifest,另外指定它的android:theme,假設叫做FullscreenTheme好了。

  • 在style裡面寫這個FullscreenTheme,它的parent = "Theme.AppCompat.Light.NoActionBar" 或是 "Theme.AppCompat.DayNight.NoActionBar",看你AppTheme用哪種,用相對的NoActionBar。

  • 如果系統狀態列(status bar)想變色,就在FullscreenTheme裡加上colorPrimaryDark,指一個跟載入畫面背景類似但較深的顏色。

  • 如果系統按鈕列(navigation bar)想變色,就在FullscreenTheme 裡加上 android:navigationBarColor,指一個跟載入畫面背景類似但較深的顏色。只是這屬性是API21才出來的,所以min不是21的話,就放在values-v21的資料夾裡的style。

    [2018/2/21更新]  DevAndroid裡有說,"當您自訂瀏覽列和狀態列時,請讓兩者都變成透明,或者只修改狀態列。 在其他所有狀況下,瀏覽列都必須保持黑色。",所以除非上下透明,不然下就不改囉~

大概就這樣,其實上下系統列也可藏,但看了FB、LINE、Youtube等App,都是上下有秀,所以就學他們囉~


2018年1月8日 星期一

[Android] 讓 Snackbar 不要被 BottomNavigationView (BottomBar) 遮住

問題:
根據Material Design的指導,Snackbar要在BottomBar之後但要長出頭,但實際直接叫Snackbar他躲在BottomBar後面說,怎麼辦?

處理:
Google 「BottomNavigationView  Snackbar」
找到幾種作法...

解法:

  1. 繼承改寫CoordinatorLayout.Behavior並在layout指給BottomBar的app:layout_behavior,詳細作法參考某日本Dev的GitHub或某馬其頓Dev的Blog。這個做法較能重複利用,用的地方也較簡潔。
  2. 另一個方法是,用SnackBar時,自己抓它的View改它的padding(內部間距)或margin(外部距離),寫個method或是如果有要繼承改寫BottomNavigationView或Snackbar的話,可順便把方法加入。可參考某中國Dev的Blog。
  3. 使用第三方BottomBar。
  4. 不要用Snackbar了,用Toast跟Dialog吧。


找資料時,也在StackOverflow看到網友反應的悲劇,4.4以下Snackbar遮BottomBar,5.0以上BottomBar遮Snackbar;

嘛....Google都是先設計UI規範,再實做元件 = =;

所以要Material Design各元件有簡單官方解,看來還有得等,官方解出來前,只能各自發揮創意或是先用有完整解的第三方元件了。

[Android] BottomNavigationView (BottomBar)跟 FloatingActionButton(FAB) 在一起

問題:
我畫面上想要有 下方快捷列(BottomBar)也想要有 懸浮按鈕(FAB),但直接加到Layout好像位置怪怪,有啥辦法可讓FAB正確在BottomBar上方呢?

做法:Google "BottomNavigationView" "FloatingActionButton"

參考:StackOverflow

解法:其實跟StackOverflow裡寫的一樣,只是我寫中文...

  1. 到FAB所在的layout
  2. 在FAB外的CoordinatorLayout 加上BottomBar在FAB下面
  3. 在CoordinatorLayout 跟BottomNavigationView地的屬性裡加上app:layout_insetEdge="bottom"
喔喔,厲害了,FAB長出來了,BottomBar也正常,耶 XD

Android Studio 3.0.1 專案雙開

問題:
我想要寫這個專案時,抄 參考另一個專案的寫法,Android Studio有辦法可以同時開兩個專案嗎?

參考:好心人教導。

解法:
  1. 先開第一個專案,這相信有用過Android Studio的都會。
  2. 去File > Open
  3. 跳出來一個對話框,選擇New Window
耶~ 成功雙開,可以開始 抄 參考了 XD

2018年1月7日 星期日

Android Studio 新專案加入 Git版控

問題:用Android Studio新建的專案,想加入Git版控,避免改壞要倒回,有什麼好工具?

處理:
嘛....以免費的Git工具來講:

  1. Git 官方工具 是最新最快的,只是Windows版預設要另開視窗打指令。
  2. SourceTree 是免費Git GUI工具中功能最多的,也有定期更新,只是GUI部分,反應有點慢,然後Win版 跟 Mac版 介面略有不同。
  3. TortoiseGit 是有用過TortoiseSVN(小烏龜SVN)的人會覺得熟悉的介面,只是只有Win版。
  4. Android Studio整合Git,要先裝1的Git工具,然後在AS裡設定位置,即可整合使用,可在AS下方的console打git指令或是一些AS提供的簡單GUI可操作,也有來自IntelliJ的差異合併工具的樣子。中文教學點這 繁中AS3.0Git教學、簡中AS2.3Git教學,官方好像沒教學文。
上面四種來說1跟4都是比較官方的做法,

只是1、2差異工具(DiffTool)跟合併工具(MergeTool)要自己指定囉~
兩平台都有人大推的是Beyond Compare 只是這是要錢工具(不想後悔併錯可考慮BUY下去 XD);

不想花錢的話,
Win可灌TortoiseSVN或TortoiseGit,然後用他的TortoiseMerge(沒單獨出真可惜...),只是記得第一次使用前先設為UTF-8編碼(不然會是Win的編碼方式);

Mac的話似乎內建差異跟合併工具FileMerge,但有時呆呆,會併錯,可參考這個Beyond Compare在Mac的替代方案 ,或是看SourceTree官方推薦的工具。

至於Git的相關概念跟流程操作,那是一個要自己做過幾次才能理解的東東...

Android App 桌面圖示(Launcher icon) 各size製作

問題:
一個App的桌面icon,要做好多尺寸,除了Visual Designer(VD)作好最大尺寸,一個一個縮之外,還有甚麼好辦法呢?

處理:
在Google搜尋了「Android icon」第一頁結果發現以下能用的方法:

  1. Android Asset Studio>Launcher icon generator
    這是線上版icon產生器,可以打字、傳圖、選icon來決定前景,背景可選色、形狀、縮邊,還能對前景作陰影特效;會產生512px 商店用的、192px xxxhdpi用的~48px mdpi用的,res部分資料夾結構會自動生成。
  2. Image Asset Studio
    官網介紹這是Android Studio內建功能,看來除了跟第一個一樣的功能,還能生出Android 8.0 Oreo開始才有的adaptive launcher icon(前後景分開,後面可變形)。
    詳細操作,網頁裡有寫 (如果是英文苦手,可在該網頁下方切簡體中文看),下面只寫簡單操作步驟:
    1-檢視方式選Android檢視。
    2-在res點右鍵,選New > Image Asset。
    3-剩下就看Image Asset Studio介面操作唄。


嗯嗯....所以說,

  • 如果要設計前後景分開的Material Design風格的icon,記得跟VD說可以只給前景的圖跟背景色碼即可,剩下的Image Asset Studio 可完成。當然,如果VD們會操作更好,因為還有縮邊、位置等問題,不是每個Dev都那麼眼利。
  • 如果還是設計傳統的含背景icon,那就請VD做最大尺寸(512*512)吧,再來縮,如果VD會縮那當然更好囉~ 如果iOS也要用一樣的,那最大尺寸要給1024*1024喔。


耶~ 又解決一個問題!

2018年1月6日 星期六

Android Studio 3.0.1 改package name

問題:Android Studio 3.0.1生出來的package名稱架構不合預期,要改package name,但用到地方很多,除了手動搬,有啥好招?

參考:http://happycodingandlearning.blogspot.tw/2017/07/android-android-studio-packagename.html

作法:
  1. 改gradle的applicationId
  2. 改manifest的package
  3. 對每一層package資料夾分別refactor>rename(這裡太多層感覺會QQ) 
  4. 原本的較多層,就把原目標層的檔在AS中,全拉到新目標層,AS會跳選項幫你處理關聯參考;原本的資料夾若空了,可按右鍵>Delete。
  5. 原本的較少層,就在Project檢視>點右邊小齒輪>點掉Compact Empty Middle Package的勾,才能顯示空的package資料夾;然後在目前最後層,點右鍵>New>Package;加好資料夾,就把原目標層的檔在AS中,全拉到新目標層,AS會跳選項幫你處理關聯參考。
嘛....大概這樣,做個筆記,我不太花時間寫圖文並茂的blog

但還是希望能幫到遇到同問題的人囉。