顯示具有 material design 標籤的文章。 顯示所有文章
顯示具有 material design 標籤的文章。 顯示所有文章

2018年8月19日 星期日

[Android] GooleI/O 2018 Android App Open Source 囉~

來源:Android Dev Blog

   好啦,來說一下這個的重點,

   簡單說,這個App的源碼,可以當作一個Google本身對現代Android App的建議的具體呈現,所以如果想做類似功能或架構可參考這支App的源碼,當成小說看看也不錯 (喂~誰看的下去)


架構部分

  • Presentation Layer,邏輯確實從View(Activity/Frgamnet)移開到ViewModel,然後使用LiveData跟Data Binding關聯資料跟UI。
  • Data Layer,有Repository 處理全部的資料邏輯,處理來自不同來源的資料,包括從Firestore來的使用者資料,跟從SharedPreferences來的偏好設定資料。
  • 兩層中間還有一個Domain Layer,負責分派不同的工作邏輯處理
  • 用了Dagger2處理dependancy injection,用了Esspreso處理instrumentation test,用了 JUnit 和 Mockito 處理unit test。



Firebase部分,這支App用到以下:

  •  Firestore:處理user data,會做同步跟快取。
  • Functions: 用來跑backend code。預訂功能靠Functions去檢查使用者狀態跟空位,及在Firestore上做預訂。
  • FCM:通知App Conference資料變更用,用了ping-and-fetch model。
  • Remote Config:用來更新跟Conference資料無直接關係的資料,像是Wifi跟接駁車。(這個居然有這種用法...)

用了Kotlin+KTX寫。

用了很多Material Design元件,只是來不及用完整的Material Theming。

之後可能還會加上JetPack,當作安卓模範生展示 XD

專案GitHub在此


Hey,看看這些你有多少還沒用呢?

2018年3月26日 星期一

[Android] ScrollView包SwipeRefreshLayout包RecyclerView完全沒有畫面(RecyclerView does not show in SwipeRefreshLayout)

問題:
因為RecyclerView做的List上面還要放一些固定的東西,但為了小螢幕手機只好用ScrollView包起來,但為了下拉刷新只好加上SwipeRefreshLayout;
就是ScrollView包SwipeRefreshLayout包RecyclerView,然後...RecyclerView就不秀了,怎麼辦呀?

參考:StackOverflowCSDNivankocijan.xyzCSDN珞璃之神

說明:
根據StackOverflow可知,SwipeRefreshLayout外面不能有ScrollView,那就反過來包;SwipeRefreshLayout包ScrollView,這樣就會秀囉。

只是這樣有幾個問題:

  1. 轉圈(progress view)不在List上方,而是在ScrollView上方。
    =>在意的話,只能改成最外面不是SwipeRefreshLayout,而是CoordinatorLayout,參考CSDN珞璃之神
  2. SwipeRefreshLayout會吃ScrollView手勢。
    =>可以判斷List到頭才啟用SwipeRefreshLayout,可參考CSDN

好啦,如果2這做法SwipeRefreshLayout包ScrollView包RecyclerView大致沒問題,只是如果把ScrollView改為NestedScrollView,下面的RecyclerView做的List會全展開,如果想限制項目數,只能自己在程式裡設定高度了。


手機螢幕高度不夠用問題真的很難解,所以Material Design才會用CoordinatorLayout、AppBarLayout、CollapsingToolbarLayout等元件,讓畫面上方有些東西可以在捲動時縮起來,設計畫面時可參考看看囉。


另外,在查資料時發現NestedScrollView在舊版v4包有很多問題,這篇在用v4:27.1.0時已經沒那些問題了。

2018年1月10日 星期三

[Android] 2018/1月份 版本分布

參考:Android dashboards


  1. 最重要的,API21+破80%了,如果有新App要做,可以考慮min用21(5.0)了,因為5.0才開始原生支援Material Design呀....還有JobScheduler呀...
  2. OREO(8.X)升為0.7%,出現在榜單4個月,8.1新進榜。
  3. 牛軋糖(7.X)+破27%,出現在榜單已15個月了...
  4. 棉花糖(6.X)以下全部下降。
  5. 牛軋糖(7.X)持續上升。
  6. 還有6.5%的使用中裝置不能玩PMGO跟熊大農場


話說,80%到90%要多久呢? 看之前紀錄...

API 19時:2016/9~2017/7=11個月。
API 18時:2016/7~2017/5=11個月。

我沒有API17+ 剛達到80%的資料了 XD

另外,API 20是Android手錶OS專用,所以沒有在這上面

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

2018年1月7日 星期日

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喔。


耶~ 又解決一個問題!