android中dp和px的關系

關于android的dp和px的關系是我剛開始學習android的第一個知識點,不知不覺學安卓也有一年了,但是偶然間我發現我理解的dp和px的關系一直是錯的,真的是有一點搞笑,今天特意寫一篇博客紀念一下這個我理解錯一年的知識點。
dp和px之間又有一個dpi作為橋梁,我們分別看看這三個屬性:

px:

像素點,比如1080*1920的屏幕,就是寬1080個像素點和高1920個像素點。

ppi:

像素密度,這個概念挺好理解的就是屏幕每英寸的像素數量,關于他的計算方法(以1080 * 1920的5英寸屏幕為例):屏幕的對角線像素數/屏幕的尺寸 √(1080 * 1080+1920 * 1920)/5=441ppi。這也就意味著即使是相同分辨率的手機尺寸不同ppi也會改變。

dpi:

dpi和ppi很容易搞混,其實他們是完全不同的兩個東西,ppi有專門的公式計算,但是dpi沒有,它往往是寫在系統出廠配置文件的一個固定值,Android在規范中規定了不同的分辨率對應的dpi值,一般有120、160、240、320、480幾個。比如,幾部相同分辨率不同尺寸的手機的ppi可能分別是是430,440,450,那么在Android系統中,可能dpi會全部指定為480,該分辨率下1dp=3px。

dp(也叫dip)設備無關像素。

關于dp的官方敘述為當屏幕每英寸有160個像素時(也就是160dpi),dp與px等價的,1dp=1px。那么當屏幕為240dpi時,1dp=(240/160)px=1.5px。也就是說dp和px的換算在于dpi這個值,計算的公式為:1dp=(屏幕的dpi/160)px。

關于dp和px的概念就這么多,還是很簡單的(我這是在打臉嗎),下面講一下衍生出的幾個問題:

1.系統根據dp計算像素值的過程

px = dp(dpi/160),這個不難理解,如果一個20dp的Button,在dpi為480的設備占的像素值就是20(480/160)=60px,這個有一點要注意,px的計算完全依照dpi這個參數,而不同尺寸和分辨率的機型的dpi可能相同,這就會造成顯示差異。

2.手機屏幕dp最大值是多少?

這個是根據手機的像素數和dpi計算得到,公式:dp=px/(dpi/160) 。也就是px = dp × (dpi / 160)
例如一個1080*1920的手機,他的寬度有1080個像素點,dpi為480,根據公式可得:1080/(480/160)=360dp
同理長度:1920/(440/160)=640dp

3.dp和px的互相轉換?

這里會用到我們在代碼中可以獲取到的一個值:手機密度Density,其實他就是手機的像素密度與基準的比值。 即像素密度為160時Density為1,可以通過下面的方法獲取這個值:

float scale = context.getResources().getDisplayMetrics().density;

dp值轉換為px值得方法為:
假設手機密度 :density = x,dp的值為y
由1dp = density px
可知ydp = yx px
所以結果為yx

px值轉換為dp值得方法為:
假設手機密度 :density = x,px的值為y
由1px = 1/density dp
可知 ypx = y/x dp
所以結果為y/x

public class DensityUtil {  /** * 根據手機的分辨率從 dp 的單位 轉成為 px(像素) */  public static int dip2px(Context context, float dpValue) {  final float scale = context.getResources().getDisplayMetrics().density;  return (int) (dpValue * scale + 0.5f);  }  /** * 根據手機的分辨率從 px(像素) 的單位 轉成為 dp */  public static int px2dip(Context context, float pxValue) {  final float scale = context.getResources().getDisplayMetrics().density;  return (int) (pxValue / scale + 0.5f);  }  
}  

至于為什么要加0.5f?
因為在java中,強制轉換符把float轉換為int時,是直接丟掉小數部分的,加0.5f起到了四舍五入的作用,可以減小誤差。

二 不同屏幕密度下的換算

在Android中,dp(密度無關像素)和px(像素)是常用的單位,它們之間的換算關系為:px = dp × (dpi / 160),其中dpi是屏幕的像素密度。以下是具體介紹:

基本概念

  • dp(密度無關像素):也叫dip,是一種與設備屏幕密度無關的抽象單位。使用dp作為單位可以確保在不同屏幕密度的設備上,界面元素的視覺大小保持一致。
  • px(像素):是屏幕上實際的物理像素點。不同設備的屏幕像素密度不同,相同數量的px在不同屏幕上的實際顯示大小可能會不同。

換算關系說明

  • 公式中的160dpi是Android系統定義的基準屏幕密度。當屏幕密度為160dpi時,1dp等于1px。如果屏幕密度高于160dpi,那么1dp對應的px數量就會大于1;反之,如果屏幕密度低于160dpi1dp對應的px數量就會小于1

不同屏幕密度下的換算示例

  • 低密度屏幕(ldpi,120dpi):根據換算公式,1dp = 120 / 160 = 0.75px。例如,一個寬度為100dp的視圖,在低密度屏幕上的寬度為100 × 0.75 = 75px
  • 中密度屏幕(mdpi,160dpi):這是Android系統的基準密度,此時1dp = 1px。所以一個50dp寬的視圖,在中密度屏幕上的寬度就是50px
  • 高密度屏幕(hdpi,240dpi):按照公式計算,1dp = 240 / 160 = 1.5px。若有一個80dp寬的視圖,在高密度屏幕上的寬度為80 × 1.5 = 120px
  • 超高密度屏幕(xhdpi,320dpi):通過換算可得1dp = 320 / 160 = 2px。比如一個60dp寬的視圖,在超高密度屏幕上的寬度為60 × 2 = 120px
  • 超超高密度屏幕(xxhdpi,480dpi):經計算1dp = 480 / 160 = 3px。假設視圖寬度為40dp,在超超高密度屏幕上的寬度為40 × 3 = 120px

在代碼中進行換算

在Android代碼中,可以通過以下方法實現dppx的相互轉換:

import android.content.Context;public class DensityUtil {// 將dp轉換為pxpublic static int dp2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}// 將px轉換為dppublic static int px2dp(Context context, float pxValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (pxValue / scale + 0.5f);}
}

上述代碼中,dp2px方法將dp值轉換為px值,px2dp方法則將px值轉換為dp值。在實際使用時,傳入當前的Context對象和需要轉換的值即可。例如:

// dp轉px
int pxValue = DensityUtil.dp2px(context, 100);// px轉dp
int dpValue = DensityUtil.px2dp(context, 200);

三 設置模擬器

在開發適用于寬高為 5120 * 1600 的車載中控屏的 Android App 時,設置 Android 模擬器的寬高需要綜合多方面因素考量,以下為介紹不同情況的設置建議:

直接模擬真實尺寸

若要精確模擬車載中控屏的實際顯示效果,可將模擬器的寬高直接設置為 5120 * 1600。這種設置的優點是能最大程度還原真實的顯示場景,讓看到 App 在該屏幕上的實際布局和視覺效果。不過,其缺點也較為明顯,由于分辨率過高,可能會對開發機器的性能造成較大壓力,導致模擬器運行緩慢甚至卡頓。

根據設計稿尺寸模擬

  • 等比例縮放:如果設計稿是按照車載中控屏的實際尺寸設計的,可以對其進行等比例縮放,選擇一個既能保證模擬效果又不會對性能造成過大壓力的尺寸。例如,將寬高按比例縮小為 2560 * 800 ,這樣既保持了與實際屏幕相同的寬高比,又降低了分辨率,使模擬器運行更加流暢。
  • 常見設計尺寸:在設計過程中,也可以參考一些常見的設計尺寸。如 1920 * 1080 這種全高清分辨率,是較為通用的設計尺寸,很多設計工具和素材資源都是基于此尺寸進行設計的。使用該尺寸可以方便獲取和適配設計資源,同時也能在一定程度上模擬出 App 在大屏幕上的布局和顯示效果。

考慮不同屏幕密度

除了寬高尺寸,還需要考慮屏幕密度(dpi)。屏幕密度會影響界面元素的實際顯示大小,不同的屏幕密度可能會導致布局出現差異。在設置模擬器時,要根據車載中控屏的實際屏幕密度來設置模擬器的密度,以確保 App 在模擬器上的顯示效果與實際設備一致。

以下是在 Android Studio 中設置模擬器的步驟:

  1. 打開 Android Studio,點擊菜單欄中的 “Tools” -> “AVD Manager”。
  2. 在 AVD Manager 中,點擊 “Create Virtual Device”。
  3. 選擇合適的設備類型,如 “Tablet” 或自定義設備。
  4. 在 “System Image” 中選擇合適的 Android 版本。
  5. 在 “Configure Device” 頁面,設置 “Screen Resolution” 為需要的寬高尺寸,同時設置 “Density” 為合適的屏幕密度。
  6. 點擊 “Finish” 完成模擬器的創建。

四 選擇合適的DPI


💡 簡單回答:

當然可以設置為 160、240 或其他 DPI,但每個 DPI 值代表的“屏幕物理密度(PPI)”不同,會直接影響:

  • 元素在屏幕上的實際顯示大小
  • dp、sp 和 px 的換算關系
  • UI 是否擁擠、過大或過小

🔍 詳細解釋:為什么 5120×1600 適合 320 DPI?

在 Android 中,dp(density-independent pixels) 是跟 DPI 綁定的:

dp 到 px 的換算公式:  px = dp × (dpi / 160)
DPI 設置說明5120px 屏幕相當于多少 dp 寬度
160 dpimdpi,基礎密度5120 px ÷ (160 / 160) = 5120 dp(UI 超大)
240 dpihdpi,高密度5120 ÷ (240 / 160) = 3413 dp
320 dpixhdpi,更高密度5120 ÷ (320 / 160) = 2560 dp ?
480 dpixxhdpi5120 ÷ (480 / 160) = 1706 dp
640 dpixxxhdpi5120 ÷ (640 / 160) = 1280 dp

🔹 一般 App UI 設計稿是基于 360dp~411dp 寬度,車載系統為了“超寬顯示”,設計時可能更接近 1920dp~2560dp 寬度范圍

因此:

  • 設置 320 DPI 👉 每個 dp 代表 2px,能獲得約 2560dp 的邏輯寬度,適合超寬車載屏。
  • 設置 160 或 240 DPI 👉 dp 太多,所有控件看起來都大得離譜。

? 總結建議:

目標推薦 DPI
高仿真真實車載屏? 320 dpi
輕量測試不追求精度240 dpi
想看極致小 UI 效果480 dpi

五 設置320dpi是為了ui控件看起來小一點

模擬器設置為 320 dpi就是為了讓 UI 控件“看起來小一點”,更接近真實車載中控屏的視覺效果和布局密度


🔍 舉個例子對比:

我們假設一個按鈕寬度是 200dp,如果設置不同的 dpi:

DPI 設置換算公式 px = 200dp × (dpi ÷ 160)實際寬度(px)顯示效果
160 dpi200 × 1 = 200px200px🔍 特別大
240 dpi200 × 1.5 = 300px300px📏 偏大
320 dpi200 × 2 = 400px ?400px👍 適中,接近真實效果
480 dpi200 × 3 = 600px600px🔎 非常小,UI很緊湊

🚗 為什么車載屏特別需要高 DPI?

車載中控屏分辨率極高(比如 5120×1600),但其實物理尺寸可能只有 29 英寸左右。DPI 越高,說明每英寸顯示的像素越多,圖像越細膩,UI 相對越小也越精致。

如果用 160 dpi,那屏幕上看起來就像一臺超大平板:按鈕像瓷磚一樣大,完全不符合車載交互預期。


? 所以最終目的:

高 DPI = dp 單位對應的 px 少 = UI 顯示小,空間多,接近真實車載效果


想做得更專業?

甚至可以去查車載屏的 實際尺寸(英寸) 和分辨率,然后計算真實 DPI ≈ √(寬2+高2) ÷ 屏幕對角線尺寸,然后設置模擬器 DPI 貼近真實值,那模擬效果就更準了!

六 DPI 和PPI的區別


? 的設備參數:

  • 分辨率:5120 x 1600 像素
  • 對角線尺寸:29.77 英寸

📐 第一步:計算 PPI(Pixels Per Inch)

PPI 是屏幕的像素密度,表示每英寸有多少個像素。
計算公式如下:

[
\text{PPI} = \frac{\sqrt{5120^2 + 1600^2}}{29.77}
]

我們來算一下:

[
\sqrt{5120^2 + 1600^2} = \sqrt{26214400 + 2560000} = \sqrt{28774400} \approx 5364.4
]

[
\text{PPI} = \frac{5364.4}{29.77} \approx \boxed{180.2}
]


? PPI ≈ 180


? DPI 是什么?它和 PPI 的區別?

項目說明
PPI (Pixels Per Inch)實際屏幕物理像素密度,是屏幕硬件參數
DPI (Density Per Inch)Android 使用的邏輯密度單位,用來計算 dp 轉 px(決定 UI 縮放)

🧠 DPI 在 Android 上是怎么分的?

DPI 名稱DPI 值
ldpi120
mdpi160 ← 基準密度(1dp = 1px)
hdpi240
xhdpi320
xxhdpi480
xxxhdpi640

? 應該設置多少 DPI?

的實際 PPI 是 180,非常接近 Android 的 mdpi=160tvdpi=213 之間。

但如果希望在 5120×1600 的模擬器上,讓 UI 元素更小一些、更接近真實車機體驗,建議設置為:

? 推薦 DPI 設置:320 dpi(xhdpi)

  • 為什么?因為 Android 設計系統基于邏輯密度,320dpi 會讓 UI 元素縮放適中,不會過大。
  • 即:UI 元素不會像平板那樣大,貼近真實中控屏體驗。

📌 總結:

參數
實際 PPI180.2
推薦 DPI(模擬器設置)320 dpi
DPI 和 PPI 的關系理論上相關,但 DPI 更是 Android 的邏輯單位,決定 UI 元素大小
為什么設高 DPI?為了讓控件更小、更精致,模擬真實車機視覺效果

七 是否可以使用2560 * 800 或者1920 * 1080 的模擬器


? 需求總結:

  • 目標設備分辨率大(5120×1600),模擬器運行起來會很卡;
  • 想在 低分辨率模擬器(比如 2560×800 或 1920×1080)上開發和預覽;
  • 最終希望在實際車機(5120×1600)上也能完美適配

? 結論:完全可行,而且推薦這么做

可以創建更小分辨率但等比例縮放的模擬器進行開發,前提是按照 Android 的規范來做 UI 適配(也就是使用 dp、ConstraintLayout、Guideline、權重布局等),就可以100%無痛遷移到高分辨率屏上


? 推薦縮放模擬器分辨率方案:

方案寬高比例推薦理由
2560×800減半縮放32:10模擬真實寬高比例,輕量好跑,適合開發階段
1920×600約等于 3:1更輕但比例有些偏差
1920×108016:9常規平板/電視比例,不太建議(比例與中控屏差異較大)

📐 比例驗證(保持適配一致性):

真實車機:5120 / 1600 = 3.2
縮放版(2560×800):2560 / 800 = 3.2 ?
這意味著縮放了屏幕,但保持了寬高比例,只要使用 dp 單位 + 相對布局方式,最終遷移到真機上不會有任何問題。


💡 開發時應該注意的幾點:

建議說明
? 使用 dp 單位保證不同分辨率設備尺寸一致
? 使用 ConstraintLayout 或 LinearLayout + 權重避免絕對 px
? 使用模擬器縮放開發,但偶爾在高分模擬器或真機預覽確保整體視覺合理
? 保持寬高比一致(3.2:1)保證控件不會被拉伸或壓縮

? 創建縮小版模擬器示例(2560×800, DPI=320)

# Windows 命令行或 Git Bash 中運行
avdmanager create avd -n CarWideScreen2560x800 \-k "system-images;android-30;google_apis;x86" \--device "pixel" \--sdcard 512M \--force# 然后編輯配置文件(路徑示例):
notepad "%USERPROFILE%\.android\avd\CarWideScreen2560x800.avd\config.ini"# 修改其中的內容:
# 添加或修改如下字段:
hw.lcd.width=2560
hw.lcd.height=800
hw.lcd.density=320

創建后,用 emulator -avd CarWideScreen2560x800 啟動模擬器。


? 總結

問題答案
能否縮小分辨率開發?? 完全可以,建議使用等比例縮放
2560×800 可以嗎?? 非常合適,比例一致,性能更輕
最終能適配到 5120×1600 嗎?? 100% 可以,只要布局寫法正確(dp + 相對布局)
要注意什么?保持寬高比、使用 dp、避免硬編碼 px

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76925.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76925.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76925.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(四)機器學習---邏輯回歸及其Python實現

之前我們提到了常見的任務和算法,本篇我們使用邏輯回歸來進行分類 分類問題回歸問題聚類問題各種復雜問題決策樹√線性回歸√K-means√神經網絡√邏輯回歸√嶺回歸密度聚類深度學習√集成學習√Lasso回歸譜聚類條件隨機場貝葉斯層次聚類隱馬爾可夫模型支持向量機高…

【汽車產品開發項目管理——端到端的汽車產品誕生流程】

MPU:集成運算器、寄存器和控制器的中央處理器芯片 MCU:微控制單元,將中央處理器CPU、存儲器ROM/RAM、計數器、IO接口及多種外設模塊集成在單一芯片上的微型計算機系統。 汽車產品開發項目屬性:臨時性、獨特性、漸進明細性、以目標…

Python將不能修改的值稱為不可變的 ,而不可變的列表被稱為元組------元組

列表非常適合用于存儲在程序運行期間可能變化的數據集。列表是可以修改的,這對處理網站的用戶列表或游戲中的角色列表至關重要。然而,有時候你需要創建一系列不可修改的元素,元組可以滿足這種需求。Python將不能修改的值稱為不可變的&#xf…

智慧醫院室內導航系統架構拆解:技術選型與性能攻堅指南

本文面向醫院信息化團隊技術負責人及醫療IoT解決方案開發者,聚焦解決大規模院區導航系統的擴展性、多源數據融合及實時路徑規劃等技術難點,提供從架構到落地的完整技術路線圖。 如需獲取智慧醫院導航導診系統解決方案請前往文章最下方獲取,如…

醫藥采購系統平臺第4天03:實現根據用戶的角色顯示不同用戶的權限菜單編寫攔截器實現權限攔截模塊的開發流程和測試流程小節

如果想要獲取相關的源碼,筆記,和相關工具,對項目需求的二次開發,可以關注我并私信!!! 四 權限管理(用戶授權)的應用:根據用戶的角色顯示不同用戶的權限菜單 經過上面的與第三方系統的成功的接入,而且在“角色管理”菜單中也對需要授權的角色進行了授權--->給一級…

#2 物聯網組成要素

從下至上,則包括了5個要素,包括 設備 / 傳感器 / 網絡 / 物聯網服務 / 數據分析 這五個要素。為了便于理解,我們用思維導圖展示 物聯網構成架構 設備 能夠感測和反饋并連到網絡進行物聯網服務的裝置 傳感器 傳感器和網關的融合實現了物…

< 自用文 Project-30.6 Crawl4AI > 為AI模型優化的網絡爬蟲工具 幫助收集和處理網絡數據的工具

官方鏈接: Github :https://github.com/unclecode/crawl4ai 文檔主頁:https://docs.crawl4ai.com/ 當前版本:Crawl4AI v0.5.0 主要新功能: 可配置策略(廣度優先、深度優先、最佳優先)探索整…

【Kafka基礎】監控與維護:動態配置管理,靈活調整集群行為

1 基礎配置操作 1.1 修改主題保留時間 /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-configs.sh --alter \--bootstrap-server 192.168.10.33:9092 \--entity-type topics \--entity-name yourtopic \--add-config retention.ms86400000 參數說明: retention…

04-微服務 面試題-mk

文章目錄 1.Spring Cloud 常見的組件有哪些?2.服務注冊和發現是什么意思?(Spring Cloud 如何實現服務注冊發現)3.Nacos配置中心熱加載實現原理及關鍵技術4.OpenFeign在微服務中的遠程服務調用工作流程5.你們項目負載均衡如何實現的 ?6.什么是服務雪崩,怎么解決這個問題?…

Redis最佳實踐——秒殺系統設計詳解

基于Redis的高并發秒殺系統設計(十萬級QPS) 一、秒殺系統核心挑戰 瞬時流量洪峰:100萬 QPS請求沖擊庫存超賣風險:精準扣減防止超賣系統高可用性:99.99%服務可用性要求數據強一致性:庫存/訂單/支付狀態同步…

AI大模型從0到1記錄學習 數據結構和算法 day18

3.3.1 棧的概述 棧(Stack)是一個線性結構,其維護了一個有序的數據列表,列表的一端稱為棧頂(top),另一端稱為棧底(bottom)。棧對數據的操作有明確限定,插入元素…

粘性定位(position:sticky)——微信小程序學習筆記

1. 簡介 CSS 中的粘性定位(Sticky positioning)是一種特殊的定位方式,它可以使元素在滾動時保持在視窗的特定位置,類似于相對定位(relative),但當頁面滾動到元素的位置時,它會表現得…

通過使用 include 語句加載并執行一個CMake腳本來引入第三方庫

通過使用 include 語句加載并執行一個CMake腳本來引入第三方庫 當項目中使用到第三方庫時,可以通過使用 include 語句來加載并執行一個CMake腳本,在引入的CMake腳本中進行第三方庫的下載、構建和庫查找路徑的設置等操作,以這種方式簡化項目中…

DNS正反向解析復習,DNS主從服務,轉發服務及DNS和nginx聯合案例

正向解析 1、配置主機名 [rootlocalhost ~]# dnf install bash-completion -y #一個按tap鍵補全的軟件 [rootlocalhost ~]# hostnamectl hostname dns #改主機名為dns [rootlocalhost ~]# exit ssh root你的IP地址 要重啟才會生效2、安裝bind [rootdns ~]# dnf install b…

網絡安全·第一天·IP協議安全分析

本篇博客講述的是網絡安全中一些協議缺陷以及相應的理論知識,本博主盡可能講明白其中的一些原理以及對應的防衛措施。 學習考研408的同學也能進來看看,或許對考研有些許幫助(按照考研現在的趨勢,年年都有新題目,本文當…

【詳解】Nginx配置WebSocket

目錄 Nginx配置WebSocket 簡介 準備工作 檢查 Nginx 版本 配置 Nginx 支持 WebSocket 修改 Nginx 配置文件 解釋配置項 測試配置 測試 WebSocket 連接 WebSocket 服務端 (Node.js) WebSocket 客戶端 (HTML JavaScript) 運行測試 Nginx 配置文件示例 解釋 測試配…

《軌道力學講義》——第八講:行星際軌道設計

第八講:行星際軌道設計 引言 行星際軌道設計是探索太陽系的核心技術,它涉及如何規劃和優化航天器從一個天體到另一個天體的飛行路徑。隨著人類探索太陽系的雄心不斷擴大,從最初的月球探測到火星探測,再到更遙遠的外太陽系探測&a…

操作系統學習筆記——[特殊字符]超詳細 | 如何喚醒被阻塞的 socket 線程?線程阻塞原理、線程池、fork/vfork徹底講明白!

💡超詳細 | 如何喚醒被阻塞的 socket 線程?線程阻塞原理、線程池、fork/vfork徹底講明白! 一、什么是阻塞?為什么線程會阻塞?二、socket線程被阻塞的典型場景🧠 解法思路: 三、線程的幾種阻塞狀…

第十六屆藍橋杯大賽軟件賽省賽 Python 大學 B 組 滿分題解

題面鏈接Htlang/2025lqb_python_b 個人覺得今年這套題整體比往年要簡單許多,但是G題想簡單了出大問題,預估50101015120860,道阻且長,再接再厲 代碼僅供學習參考,滿分為賽后洛谷中的測評,藍橋杯官方測評待…

若依代碼生成器原理velocity模板引擎(自用)

1.源碼分析 代碼生成器:導入表結構(預覽、編輯、刪除、同步)、生成前后端代碼 代碼生成器表結構說明: 若依提供了兩張核心表來存儲導入的業務表信息: gen_table:存儲業務表的基本信息 ,它對應于配置代碼基本信息和生成信息的頁…