頭條螢幕適配問題彙總及解決,這次你值得嘗試

blankj發表於2018-08-24

由於該方案確實值得我們使用,所以藉助大家開源的力量一起來完善,這次你值得嘗試。

適配的原理及怎麼適配?

Android 螢幕適配從未如斯簡單(8月10日最終更新版),由於文章寫的較早,請用 1.19.2 版本及以上來完美適配。

如何建立 mdpi 1080 * 1920 裝置的預覽圖?

建立新的模擬器裝置,然後修改解析度和螢幕尺寸使其達到 mdpi 即可。

webview 載入後發現 density 復原?

由於 WebView 初始化的時候會還原 density 的值導致適配失效,繼承 WebView,重寫如下方法:

@Override
public void setOverScrollMode(int mode) {
    super.setOverScrollMode(mode);
    ScreenUtils.restoreAdaptScreen();
}
複製程式碼

如何讓系統 View 尺寸正常?

後面提到的 Dialog 和 Toast 其實都可以用用這種解決方案,就是在 inflate 相關 View 之前呼叫 ScreenUtils#cancelAdaptScreenshow 之後呼叫 ScreenUtils#restoreAdaptScreen 即可,這樣就可以讓系統 View 顯示正常尺寸。

顯示 dialog 尺寸有問題?

如果你適配傳入的不是 mdpi 下的尺寸,而是 xxhdpi,那麼可能會導致 AlertDialog 跑到螢幕外邊,所以在文章中我也提到了只用 mdpi 來適配,正常情況的 mdpi 是會呈現比較小的尺寸,如果你要取得和原生一致的效果,那就利用上面提到的「如何讓系統 View 尺寸正常」封裝下在 Dialog 顯示前呼叫 ScreenUtils#cancelAdaptScreen,Dismiss 後根據需求看是否需要 ScreenUtils#restoreAdaptScreen;或者你也可以給 Dialog 定製統一的 styles 來解決尺寸(<item name="android:windowMinWidthMinor">576dp</item> <!-- 佔 80% 屏寬 720 * 0.8 = 576 -->)、字型的問題。當然,如果專案組有封裝好的 Dialog,那麼統一修改這個 Dialog 庫的尺寸即可。

Toast 尺寸有問題?

使用 1.19.1 及以上版本的 ToastUtils 來顯示 Toast 不會有這個問題(解決之道就是上面提到的「如何讓系統 View 尺寸正常」),當然你也可以自己封裝不用我的 ToastUtils;或者參照 CustomToast 來自定義 Toast 佈局。

更大尺寸的裝置想要顯示更多的內容?

可以使用 sw 的方案來解決尺寸更大的裝置可以顯示更多的內容,本方案和 sw 並沒有衝突,所以如果你需要在全面屏或者大屏裝置顯示更多的內容可以建立新的 dimens 來解決,這樣就可以做到在某一尺寸範圍內的裝置顯示效果都一致,解決了某些人總是口口聲聲說「更大的螢幕就應該獲取更多的資訊啊」。

後續如果還有問題可以到 GitHub 螢幕適配問題彙總及解決 中提 issue

相關文章