Android 如何查詢最佳匹配資源

2021-09-12 12:53:19 字數 2113 閱讀 6091

android 如何查詢最佳匹配資源**)

當您請求要為其提供備用資源的資源時,android 會根據當前的裝置配置選擇要在執行時使用的備用資源。為演示 android 如何選擇備用資源,假設以下可繪製物件目錄分別包含相同影象的不同版本:

drawable/

drawable-en/

drawable-fr-rca/

drawable-en-port/

drawable-en-notouch-12key/

drawable-port-ldpi/

drawable-port-notouch-12key/

同時,假設裝置配置如下:

語言區域 = en-gb

螢幕方向 = port

螢幕畫素密度 = hdpi

觸控螢幕型別 = notouch

主要文字輸入法 = 12key

通過將裝置配置與可用的備用資源進行比較,android 從 drawable-en-port 中選擇可繪製物件。

系統使用以下邏輯決定要使用的資源:

圖 2. android 如何查詢最佳匹配資源的流程圖。

drawable/

drawable-en/

drawable-fr-rca/

drawable-en-port/

drawable-en-notouch-12key/

drawable-port-ldpi/

drawable-port-notouch-12key/

例外:螢幕畫素密度是唯一乙個未因衝突而被淘汰的限定符。 儘管裝置的螢幕密度為 hdpi,但是 drawable-port-ldpi/ 未被淘汰,因為此時每個螢幕密度均視為匹配。如需了解詳細資訊,請參閱支援多種螢幕文件。

選擇列表(表 2)中(下乙個)優先順序最高的限定符。(先從 mcc 開始,然後下移。)

是否有資源目錄包括此限定符?

若無,請返回到第 2 步,看看下乙個限定符。(在該示例中,除非達到語言限定符,否則答案始終為「否」。)

若有,請繼續執行第 4 步。

淘汰不含此限定符的資源目錄。在該示例中,系統會淘汰所有不含語言限定符的目錄。

drawable/

drawable-en/

drawable-en-port/

drawable-en-notouch-12key/

drawable-port-ldpi/

drawable-port-notouch-12key/

例外:如果涉及的限定符是螢幕畫素密度,則 android 會選擇最接近裝置螢幕密度的選項。通常,android 傾向於縮小大型原始影象,而不是放大小型原始影象。請參閱支援多種螢幕。

返回並重複第 2 步、第 3 步和第 4 步,直到只剩下乙個目錄為止。在此示例中,螢幕方向是下乙個判斷是否匹配的限定符。因此,未指定螢幕方向的資源被淘汰:

drawable-en/

drawable-en-port/

drawable-en-notouch-12key/

剩下的目錄是 drawable-en-port。

儘管對所請求的每個資源均執行此程式,但是系統仍會對某些方面做進一步優化。 例如,系統一旦知道裝置配置,即會淘汰可能永遠無法匹配的備用資源。 比如說,如果配置語言是英語(「en」),則系統絕不會將語言限定符設定為非英語的任何資源目錄包含在選中的資源池中(不過,仍會將不帶語言限定符的資源目錄包含在該池中)。

根據螢幕尺寸限定符選擇資源時,如果沒有更好的匹配資源,則系統將使用專為小於當前螢幕的螢幕而設計的資源(例如,如有必要,大尺寸螢幕將使用標準尺寸的螢幕資源)。 但是,如果唯一可用的資源大於當前螢幕,則系統不會使用這些資源,並且如果沒有其他資源與裝置配置匹配,應用將會崩潰(例如,如果所有布局資源均用 xlarge 限定符標記,但裝置是標準尺寸的螢幕)。

注:限定符的優先順序(表 2 中)比與裝置完全匹配的限定符數量更加重要。例如,在上面的第 4 步中,列表剩下的最後選項包括三個與裝置完全匹配的限定符(方向、觸控螢幕型別和輸入法),而 drawable-en 只有乙個匹配引數(語言)。但是,語言的優先順序高於其他兩個限定符,因此 drawable-port-notouch-12key 被淘汰。

如何實現示波器探頭的最佳匹配?

摘要 探頭是觀測訊號的第乙個環節,主要作用是承載訊號傳輸的鏈路,將待測訊號完整 可靠的傳輸至示波器,進行測量分析。可是你知道如何實現探頭的最佳匹配嗎?1.探頭分類 探頭通常按測量物件進行分類,分類如圖1所示。其中,高阻無源探頭 高壓差分探頭和電流探頭是我們最為熟悉的,接下來做乙個簡要的介紹。圖1 探...

完全匹配和最佳匹配

1.struct point point pp new point move pp void move point 1 void move point 2 void move const point 3 void move const point 4 如果只定義了 2和 4,那麼由於形參是引用或指標...

Android 塗鴉最佳實踐

android中實現手勢畫圖一般都兩種方式,一是直接在view上繪製,而是使用su ceview。兩者還是有一些差別的。簡介下。view 顯示檢視,內建畫布,提供圖形繪製函式 觸屏事件 按鍵事件函式等 必須在ui主線程內更新畫面。速度較慢。su ceview 基於view檢視進行拓展的檢視類。更適合...