Published inEricLog·Jul 14Member-onlyAndroid pseudolocale在處理 app UI 多國語言時,我們不時要留意是不是預留了足夠空間來顯示文字。一般而言,中文內容通常都比其他語言短,你的 UI 可能看起來沒有問題,但換到其他寫得比較長的語言就可能不夠位顯示。但在開發初期可能還未開始翻譯,只有英文版,未必能在早期察覺這個問題。 Android SDK 其實有一個功能叫 pseudolocale,字面意思是假的地區設定 …AndroidDev6 min readAndroidDev6 min read
Published inEricLog·Jan 25Member-onlyAndroid 13 Per-app Language Preferences最近抽點時間把 MetroRide 參照 Now in Android 示範項目更新一下,例如改用 TOML 版的 version catalog(之前是用 Kotlin DSL)、轉用 includeBuild 加 convention plugin 取代之前把 plugin 放在 buildSrc 內、更新 dependency 版本和把 t …14 min read14 min read
Published inEricLog·Jul 27, 2022Member-onlyJetpack Compose Navigation component sub-graph這次遷移到 Compose 時特別花了時間試用 Compose 的 Navigation component,終於弄清 nested graph 的意義。其實 Compose 的 Navigation component 底層都是跟 XML 版的 Navigation component 一樣,只是底層多了以 route 形式的處理。以往的說明文 …Android Development7 min readAndroid Development7 min read
Published inEricLog·Jul 26, 2022Member-onlyJetpack Compose 遷移 (2)上一篇提過如何將 MetroRide 由傳統 view system 遷移到 Jetpack Compose。但一篇又太長,所以分拆成兩篇。 Dependency injection 按照官方的建議,composable function 要用到的 dependency 應該由 caller 經參數提供。然後就是由外層一直傳進去。至於那個外層最遠可以去到 Activity 或者 Fragm …AndroidDev8 min readAndroidDev8 min read
Published inEricLog·Jul 24, 2022Member-onlyJetpack Compose 遷移 (1)近幾個月斷斷續續替 MetroRide 的界面由傳統 view system(即是 layout XML)轉為 Jetpack Compose,順帶補上去年參加 iThome 鐵人賽時用來做示範的重鐵抵站時間功能。昨天新版 app 上架了就來分享一下遷移過程。其實這個 app 在之前的版本有把其中一頁靜態的頁面(延誤定義)改用 Compose,那 …14 min read14 min read
Published inEricLog·Jan 28, 2022Member-onlyAndroidX Room Relational Query Method最近為 MetroRide 做新功能,剛好有個地方可以用到 Room 2.4 的新功能:Relational Query Method。這個功能可以把平常 table 之間的 relationship 用 Map 一次過 return 出來,不用像以前般要特製一個專門的 data class 來做 DAO query method 的 retur …AndroidDev17 min readAndroidDev17 min read
Published inEricLog·Apr 10, 2021Member-only文字末端 icon 排版以前試過做一些 UI 是 TextView 旁邊有一個 icon,然後同一行最右邊會有另一個 Button。如果文字過長就加上省略號,但文字不夠長的話 icon 要緊貼那個文字而那個 Button 就固定在右邊。 TextView 有 compound drawable,但如果想那個 icon 有 click listener 又用不了。所以最後 …Android14 min readAndroid14 min read
Published inEricLog·Mar 14, 2021Member-onlyAndroid SMS Verification APIsSMS 驗證應該是一個在 Android app 頗為常見的需求。一般做法都是先讓用戶填寫電話號碼,然後 app 會把電話號碼交到 backend 再透過 SMS gateway 發送含有驗證碼短訊, 當用戶收到 SMS 後再把內文的驗證碼輸入到 app 中。如果想省卻用戶輪入文字的話有一些 app 會透過 READ_SMS 權限讀取 SMS 內 …AndroidDev7 min readAndroidDev7 min read
Published inEricLog·Mar 13, 2021Member-onlyNotification Channel 自訂音效自從由 Android 8 開始,如果要顯示 notification 的話就一定要指定一個 notification channel ,否則系統不會顯示。Notification channel 的目的是讓用戶能自行調節 app 的各式 notification 的提示方法,例如有沒有音效、會不會彈出 heads-up notification …Android5 min readAndroid5 min read
Published inEricLog·Nov 14, 2020Member-onlyJetpack DataStore 搭配 kotlinx.serialization Protobuf上月 kotlinx.serialization 出了 1.0 版。除了支援 JSON 之外,還有支援 Protocol Buffers (Protobuf),而且還是跨平台支援。而在前一個月 Android 出了 Jetpack DataStore,它是一個用來取代 SharedPreferences 的 library。它有兩種用法: Pre …AndroidDev12 min readAndroidDev12 min read