Jetpack Compose Image ContentScale.Crop 如何指定裁剪位置?用 BiasAlignment 解決

在製作縮圖類型的 UI 介面時,Jetpack Compose 的 Image 搭配 ContentScale.Crop 是常見的做法。預設情況下會裁剪圖片中央,但若需要指定裁剪位置,可以透過 alignment 參數來調整。對於基本的上下左右對齊,Alignment 的 companion properties 即可滿足;若需要更精細的控制,則可以使用 BiasAlignment,以 -1f 到 1f 的偏移量來指定水平與垂直方向的裁剪位置。此外,文章也介紹了 BiasAbsoluteAlignment,與 BiasAlignment 的差異在於前者使用絕對的左右方向,後者則會依據 LTR / RTL 語系自動調整,適合需要支援國際化的 UI 設計。

Published on March 22, 2026 · 1 分鐘 · 170 字 · Daniel Huang

我以為是權限問題,結果是 Google Play 的控管型發布讓我不能下架 App

記錄在 Google Play 取消發布 App 時,因未關閉「控管型發布」導致「未發布」選項無法選取的問題。說明官方限制條件,並整理關閉控管型發布後即可順利解除發布的完整操作流程,作為備忘錄。

Published on January 6, 2026 · 1 分鐘 · 51 字 · Daniel Huang

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學

SonarQube Community Build 是免費的原始碼品質與資安檢測工具。本篇文章從環境需求、安裝步驟到以 Gradle 建置的 Android 專案整合,完整示範如何在本機快速導入 SonarQube 並開始進行程式碼分析。

Published on December 3, 2025 · 2 分鐘 · 393 字 · Daniel Huang

Android Studio 編譯失敗 - Error loading build artifacts

Android Studio 出現「Error loading build artifacts」導致無法編譯?本文提供詳細錯誤訊息、排查步驟與最終修復方式,協助開發者快速解決問題。

Published on September 12, 2025 · 1 分鐘 · 193 字 · Daniel Huang

TypedArray.use{} 在 Android 11 以下出錯? Crash 原因與正確寫法一次看懂

在 Android 開發中使用 Kotlin 的 use {} 是常見的資源釋放寫法,但你知道在 Android 11 (API 30) 以前對某些類別其實會造成 Crash 嗎?這篇文章帶你深入解析 TypedArray 為什麼不能直接用 use {},並提供正確的修正方式與建議,避免掉不必要的陷阱!

Published on June 12, 2025 · 1 分鐘 · 211 字 · Daniel Huang