Android Studio Target 35 升級指南:修復狀態列覆蓋內容的 UI Bug

Google 最近強制所有 Android APP 開發 Target 必須改為 35 或以上,否則就不讓活。根據官方建議,程式需要用到 Insets 這個 API。

因為我自己不是很專業的 Android 開發者,一開始就中招了,沒認真看官方建議,直接把 Target 改為 35 後就提交上陣。為何我敢這樣做,因為我的手機是 Android 14 ,不會受影響;直到同事哇哇叫,說 APP 改版後,他手機 Android 15 出現重疊問題。

總歸一句話,我應該用 pixel 的

照著官方說法,我試了幾次,解決方式如下(Java)

public static void setView(Activity act,View view){
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.VANILLA_ICE_CREAM)  return;
        
        WindowCompat.enableEdgeToEdge(act.getWindow());
        
        ViewCompat.setOnApplyWindowInsetsListener(view, (v, insets) -> {

            Insets bars = insets.getInsets(
                    WindowInsetsCompat.Type.systemBars()
                            | WindowInsetsCompat.Type.displayCutout()
            );
            v.setPadding(bars.left, bars.top, bars.right, bars.bottom);
            return WindowInsetsCompat.CONSUMED;

        });

}

當然還有一些內嵌重疊問題,如手勢內嵌,因為我的程式沒有這樣設計,無法測試,請以官方文件建議修改。

發表迴響