<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Android 資源適配踩坑記:為什么我的設備匹配不上對應的 `values-wXXXdp-hXXXdp`?

      一、問題背景

      最近在做項目適配時,我遇到了一個非常詭異的問題:
      我的應用需要適配不同尺寸的手表屏幕,因此我在 res/ 目錄下為不同設備準備了多份 dimens.xml 文件,例如:

      res/
       ├── values/
       ├── values-w320dp-h374dp/
       ├── values-w360dp-h390dp/
       ├── values-w388dp-h450dp/
      

      大多數設備都能正確匹配各自的 dimens 文件,唯獨一臺 120dpi、分辨率為 240×280 px 的設備始終無法命中對應的 values-w320dp-h374dp。
      安裝后應用總是加載默認的 values/ 文件,看似 Android 完全忽略了那一份適配資源。


      二、我一開始的誤區

      起初我以為問題出在 DPI 與分辨率不匹配,
      但因為我在文件夾名里已經用的是 dp,而不是 px,理論上系統應該能自動計算出相應的邏輯尺寸。
      可事實證明:Android 的資源匹配邏輯并不是簡單地用公式換算出來的 dp 值。


      三、真正的原因:screenWidthDpscreenHeightDp

      Android 在匹配諸如 values-wXXXdp-hXXXdp 的目錄時,并不是用分辨率直接換算,而是用系統內部維護的兩個配置字段:

      Configuration.screenWidthDp
      Configuration.screenHeightDp
      

      這兩個值代表當前屏幕在 邏輯 dp 下的“可用區域”,
      是系統根據 densityDpi、方向、系統欄、可用窗口等綜合計算出來的整數值。
      ——注意,是 整數值!


      四、計算過程舉例(關鍵)

      我們那臺 120dpi 的設備分辨率為 240×280 px。

      Android 的換算公式為:

      dp = px × 160 / densityDpi
      

      計算得:

      寬度:240 × (160 / 120) = 320.0 dp
      高度:280 × (160 / 120) = 373.3 dp
      

      ? 寬度是 320dp,剛好對上;
      ? 高度是 373.3dp,不到 374dp。

      Configuration.screenHeightDp 在系統中是取整后的整數(通常向下取整),
      所以系統認為該設備的可用高度是 373dp,而不是 374dp。

      因此:

      values-w320dp-h374dp   ? 不匹配
      values-w320dp-h373dp   ? 完美匹配
      

      五、驗證方法

      可以在任意 Activity 中打印出系統真實使用的邏輯尺寸:

      Configuration c = getResources().getConfiguration();
      Log.i("ScreenDP", "screenWidthDp=" + c.screenWidthDp + ", screenHeightDp=" + c.screenHeightDp);
      

      輸出結果類似:

      screenWidthDp=320, screenHeightDp=373
      

      這兩個值才是 Android 資源選擇系統真正參考的指標。


      六、如何正確適配

      ? 方法一:根據實際 screenWidthDp / screenHeightDp 創建目錄

      在每個目標設備上打印這兩個值,然后根據結果命名目錄:

      values-w320dp-h373dp/
      values-w360dp-h390dp/
      values-w388dp-h450dp/
      

      ? 方法二:使用 swNNNdp(最小寬度)適配

      swNNNdp(smallest width)基于設備最小邊的 dp 尺寸,不受方向和系統欄影響,更穩妥:

      values-sw320dp/
      values-sw360dp/
      values-sw388dp/
      

      ? 方法三:只按寬度區分

      如果不同設備只是比例略有差異,可以僅根據寬度劃分目錄,簡化適配。


      七、延伸思考:為什么要“向下取整”

      Android 在比較匹配條件時,為了避免資源抖動(例如狀態欄隱藏/顯示導致高度輕微變化),會將 dp 尺寸以整數形式存儲。
      也就是說即使設備計算出的高度是 373.9dp,系統仍然認為是 373dp。

      這也是為什么即便你寫了 374dp,看起來只差 0.1dp,卻完全不會命中的原因。


      八、總結

      設備參數 結果
      分辨率 240×280 px
      densityDpi 120
      實際邏輯大小 320×373dp
      系統用于匹配的值 w320dp-h373dp
      正確目錄 values-w320dp-h373dp ?

      ?? 寫在最后

      這次經歷讓我重新理解了 Android 的資源匹配邏輯:

      “Android 匹配的不是你以為的分辨率,而是系統眼中的邏輯 dp 尺寸?!?/strong>

      如果你也在做屏幕適配,不妨動手打印一下 screenWidthDp / screenHeightDp ——
      你會發現很多“為什么匹配不到”的謎團,其實都藏在這兩個數字里。

      posted @ 2025-10-22 17:04  Greg_LYU  閱讀(7)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 人妻少妇久久中文字幕一区二区| 亚洲一本大道在线| 国产精品亚洲二区在线看| 高清国产精品人妻一区二区| 欧美亚洲h在线一区二区| 国产精品视频白浆免费视频| 亚洲国产午夜精品福利| 华容县| 国产69精品久久久久人妻| 日本一区二区三区视频一| 日本a在线播放| 日本一区二区三区四区黄色| 日本大片在线看黄a∨免费| 大香j蕉75久久精品免费8| 中文字幕日韩国产精品| 欧美人妻久久精品| 青青草无码免费一二三区 | 精品乱人码一区二区二区| 日韩国产成人精品视频| 日本一二三区视频在线| 国产偷国产偷亚洲高清日韩| 亚洲av日韩av永久无码电影| 黔南| 亚洲精品综合久久国产二区| 国内揄拍国内精品人妻| 国产精品三级中文字幕| 悠悠人体艺术视频在线播放| 欧美色欧美亚洲高清在线观看 | 久久精品国产亚洲av久| 日韩国产成人精品视频| 伊人久久大香线蕉网av| 久色伊人激情文学你懂的| 国产精品va无码一区二区| 亚洲成亚洲成网| 久久亚洲精品无码播放| 国产成人精品日本亚洲| 干老熟女干老穴干老女人| 亚洲中文字幕人妻系列| 巨胸喷奶水视频www免费网站| 国产精品综合一区二区三区| 蜜臀av久久国产午夜|