Android復習(三)清單文件中的元素——>supports-gl-texture、supports-screens
<supports-gl-texture>
注意:Google Play 會根據應用支持的紋理壓縮格式對其進行過濾,以確保應用只能安裝在可正確處理其紋理的設備上。您可以將紋理壓縮過濾用作定位特定設備類型(基于 GPU 平臺)的一種方法。
有關 Google Play 如何將 <supports-gl-texture> 元素用作過濾基礎的重要信息,請閱讀下文的 Google Play 和紋理壓縮過濾。
- 語法:
-
<supports-gl-texture android:name="string" /> - 包含于:
<manifest>- 說明:
- 聲明應用支持的一種 GL 紋理壓縮格式。
應用安裝在設備上后,如果能夠提供以某種 GL 紋理壓縮格式壓縮的紋理資源,就說明應用“支持”這種格式。應用可以在本地提供壓縮的資源(從
.apk內),也可以在運行時從服務器下載壓縮的資源。每個
<supports-gl-texture>元素只聲明一種支持的紋理壓縮格式,將其指定為android:name屬性的值。如果您的應用支持多種紋理壓縮格式,您可以聲明多個<supports-gl-texture>元素。例如:<supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" /> <supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />聲明的
<supports-gl-texture>元素是信息性元素,這意味著,Android 系統本身不會在應用安裝時檢查這些元素以確保與設備上支持的內容匹配。不過,其他服務(如 Google Play)或應用可以在處理您的應用或與您的應用交互過程中檢查其<supports-gl-texture>聲明。因此,請務必聲明您的應用能夠支持的所有紋理壓縮格式(在下面的列表中)。應用和設備通常使用下面列出的同一組為人熟知的字符串來聲明它們支持的 GL 紋理壓縮格式。這一組格式字符串可能會隨著時間的推移按需增加,而且由于值是字符串,因此應用可根據需要隨意聲明其他格式。
假定應用是使用 SDK Platform Tools r3 或更高版本構建的,那么會針對所有 API 級別激活基于
<supports-gl-texture>元素的過濾。 - 屬性:
android:name- 以描述符字符串的形式指定應用支持的一種 GL 紋理壓縮格式。下表列出了常見的描述符值。
紋理壓縮格式描述符 注釋 GL_OES_compressed_ETC1_RGB8_textureEricsson 紋理壓縮。在 OpenGL ES 2.0 中指定,在所有支持 OpenGL ES 2.0 的 Android 設備上可用。 GL_OES_compressed_paletted_texture通用調色板紋理壓縮。 GL_AMD_compressed_3DC_textureATI 3Dc 紋理壓縮。 GL_AMD_compressed_ATC_textureATI 紋理壓縮。在運行 Adreno GPU 的設備(包括 HTC Nexus One、Droid Incredible、EVO 及其他)上可用。為了實現最廣泛的兼容性,設備還可以聲明帶有 GL_ATI_texture_compression_atitc描述符的<supports-gl-texture>元素。GL_EXT_texture_compression_latc亮度 Alpha 值紋理壓縮。 GL_EXT_texture_compression_dxt1S3 DXT1 紋理壓縮。在運行 Nvidia Tegra2 平臺的設備(包括 Motorala Xoom、Motorola Atrix、Droid Bionic 及其他)上受支持。 GL_EXT_texture_compression_s3tcS3 紋理壓縮,不特定于 DXT 變體。在運行 Nvidia Tegra2 平臺的設備(包括 Motorala Xoom、Motorola Atrix、Droid Bionic 及其他)上受支持。如果您的應用需要特定的 DXT 變體,請聲明相應的描述符,而不是此描述符。 GL_IMG_texture_compression_pvrtcPowerVR 紋理壓縮。在運行 PowerVR SGX530/540 GPU 的設備(如 Motorola DROID 系列、Samsung Galaxy S、Nexus S 和 Galaxy Tab 及其他)上可用。
- 另請參閱:
Google Play 和紋理壓縮過濾
Google Play 會過濾用戶可見的應用,以便用戶只能看到和下載與其設備兼容的應用。它過濾應用的一種方法是通過紋理壓縮兼容性,讓您能夠根據設備上 GPU 的功能來控制您的應用對各種設備的可用性。
為了確定應用與給定用戶設備的紋理壓縮兼容性,Google Play 會將以下兩者進行比較:
- 應用支持的紋理壓縮格式 - 應用在其清單的
<supports-gl-texture>元素中聲明其支持的紋理壓縮格式。 - 設備上的 GPU 支持的紋理壓縮格式 - 設備將其支持的格式報告為只讀系統屬性。
每當您將應用上傳到 Google Play 管理中心時,Google Play 都會掃描應用的清單文件并查找有無 <supports-gl-texture> 元素。它會從這些元素中提取格式描述符,并在內部將其存儲為與應用 .apk 和應用版本關聯的元數據。
當用戶在 Google Play 上搜索或瀏覽應用時,該服務會將應用支持的紋理壓縮格式與用戶設備支持的紋理壓縮格式進行比較。這種比較基于格式描述符字符串,匹配必須是完全匹配。
如果應用支持的任何紋理壓縮格式也受設備支持,則 Google Play 將允許用戶看到該應用,用戶也有可能下載該應用。否則,如果應用支持的任何格式都不受設備支持,則 Google Play 會過濾掉該應用,以使其無法下載。
如果應用未聲明任何 <supports-gl-texture> 元素,則 Google Play 不會應用任何基于 GL 紋理壓縮格式的過濾。
<supports-screens>
- 語法:
-
<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"]
android:normalScreens=["true" | "false"]
android:largeScreens=["true" | "false"]
android:xlargeScreens=["true" | "false"]
android:anyDensity=["true" | "false"]
android:requiresSmallestWidthDp="integer"
android:compatibleWidthLimitDp="integer"
android:largestWidthLimitDp="integer"/>
- 包含于:
<manifest>- 說明:
- 使您能夠指定應用支持的屏幕尺寸,并為比應用支持的最大屏幕還大的屏幕啟用屏幕兼容模式。請務必始終在應用中使用此元素指定應用支持的屏幕尺寸。
注意:建議不要在屏幕兼容模式下運行應用,因為它會因縮放而導致界面中出現像素化和模糊。讓應用在大屏幕上正常運行的正確方法是遵循支持多種屏幕指南,并為不同尺寸的屏幕提供備用布局。
如果應用可以適當調整大小以填充整個屏幕,那么它就“支持”指定的屏幕尺寸。由系統應用的標準大小調整方式對于大多數應用來說效果不錯,您無需執行任何額外操作即可讓應用在比手機更大的屏幕上運行。不過,通常需要通過提供備用布局資源來優化應用的界面,以適應不同的屏幕尺寸。例如,與在手機上運行時相比,您可能需要修改 Activity 在平板電腦上的布局。
不過,如果應用在調整大小以適應不同的屏幕尺寸時效果不佳,您可以使用
<supports-screens>元素的屬性來控制是將應用分發到較小的屏幕,還是使用系統的屏幕兼容模式放大(“縮放”)界面以適應較大的屏幕。如果您未針對較大屏幕尺寸進行設計,并且標準大小調整方式無法達到理想的效果,則屏幕兼容模式會通過模擬標準尺寸屏幕和中密度然后再放大來縮放界面,以使其填充整個屏幕。請注意,這會導致界面像素化和變模糊,因此最好針對大屏幕優化界面。注意:Android 3.2 引入了新屬性:
android:requiresSmallestWidthDp、android:compatibleWidthLimitDp和android:largestWidthLimitDp。如果您要針對 Android 3.2 及更高版本開發應用,則應使用這些屬性(而不是基于通用屏幕尺寸的屬性)聲明屏幕尺寸支持。屏幕兼容模式簡介
只有在萬不得已時,才可以針對無法充分利用較大屏幕尺寸的應用使用屏幕兼容模式。建議不要在此模式下運行應用,因為它會導致用戶體驗不佳。屏幕兼容模式有兩種不同的版本,具體取決于運行應用的設備版本。
在 Android 版本 1.6 至 3.1 中,系統會在“郵票式”窗口中運行您的應用。它會模擬 320dp x 480dp 屏幕,并用黑色邊框填充屏幕的剩余區域。
在 Android 3.2 及更高版本上,系統會像在 320dp x 480dp 屏幕上一樣繪制布局,然后將其放大以填充屏幕。這通常會導致界面中出現模糊和像素化之類的失真。
如需詳細了解如何正確支持不同的屏幕尺寸以免在應用中使用屏幕兼容模式,請參閱支持多種屏幕一文。
- 屬性:
android:resizeable- 指示應用是否可根據不同的屏幕尺寸調整大小。此屬性默認為 true。如果設置為 false,則系統在大屏幕上會以屏幕兼容模式運行應用。
此屬性已棄用。引入此屬性是為了幫助應用從 Android 1.5 過渡到 1.6(首次引入對多屏幕的支持)。請不要使用此屬性。
android:smallScreens- 指示應用是否支持較小屏幕這種設備類型。小屏幕指的是寬高比小于“標準”(傳統 HVGA)屏幕的屏幕。不支持小屏幕的應用將不適用于采用外部服務(如 Google Play)的小屏幕設備,因為平臺幾乎無法讓此類應用在較小屏幕上正常運行。此屬性默認為
"true"。 android:normalScreens- 指示應用是否支持“標準”屏幕這種設備類型。一直以來,標準屏幕是指 HVGA 中密度屏幕,但 WQVGA 低密度和 WVGA 高密度也被視為標準屏幕。此屬性默認為“true”。
android:largeScreens- 指示應用是否支持較大屏幕這種設備類型。大屏幕指的是比“標準”手機屏幕大得多的屏幕,因此應用可能需要特別注意以充分利用此類屏幕,雖然應用可以依賴系統調整大小來填充屏幕。
此屬性的默認值實際上在某些版本之間會有所不同,因此最好始終明確聲明此屬性。請注意,將其設置為“false”一般會啟用屏幕兼容模式。
android:xlargeScreens- 指示應用是否支持超大屏幕這種設備類型。超大屏幕指的是比“大”屏幕大得多的屏幕,例如平板電腦(或更大的設備),應用可能需要特別注意以充分利用此類屏幕,雖然應用可以依賴系統調整大小來填充屏幕。
此屬性的默認值實際上在某些版本之間會有所不同,因此最好始終明確聲明此屬性。請注意,將其設置為“false”一般會啟用屏幕兼容模式。
此屬性是在 API 級別 9 中引入的。
android:anyDensity- 指示應用是否包含用于適應任何屏幕密度的資源。
對于支持 Android 1.6(API 級別 4)及更高版本的應用,此屬性默認為“true”。不應將其設置為“false”,除非您非常確定有必要這樣設置才能讓應用正常運行。只有在您的應用直接操控位圖時才有必要停用此屬性(如需了解詳情,請參閱支持多種屏幕文檔)。
android:requiresSmallestWidthDp- 指定所需的最小 smallestWidth。smallestWidth 是必須為應用界面提供的屏幕空間的最短邊尺寸(以
dp為單位),也是可用屏幕的兩個尺寸中的最短尺寸。因此,為了使設備與您的應用兼容,設備的 smallestWidth 必須等于或大于此值。(通常,您為此屬性提供的值是布局支持的“最小寬度”,無論當前屏幕方向如何。)例如,典型手機屏幕的 smallestWidth 為 320dp,7 英寸平板電腦的 smallestWidth 為 600dp,10 英寸平板電腦的 smallestWidth 為 720dp。這些值通常為 smallestWidth,因為它們是屏幕可用空間的最短邊尺寸。
與您的值進行比較的尺寸將屏幕裝飾和系統界面都考慮在內。例如,如果設備的屏幕上有一些永久性界面元素,則系統會將設備的 smallestWidth 聲明為小于實際屏幕尺寸的尺寸,從而考慮這些界面元素,因為這些界面元素是您的界面無法使用的屏幕像素。因此,您使用的值應該是布局所需的最小寬度,無論當前屏幕方向如何。
如果您的應用針對較小屏幕尺寸(小至“小”尺寸或最小寬度 320dp)適當調整大小,則無需使用此屬性。否則,您為此屬性使用的值應與應用針對最小屏幕寬度限定符 (
sw<N>dp) 所使用的最小值一致。注意:Android 系統不會注意此屬性,因此它不會影響應用在運行時的行為方式。不過,您可以使用此屬性在 Google Play 等服務上為應用啟用過濾功能。但是,Google Play 當前不支持使用此屬性進行過濾(在 Android 3.2 上)。因此,如果您的應用不支持小屏幕,則應繼續使用其他尺寸屬性。
此屬性是在 API 級別 13 中引入的。
android:compatibleWidthLimitDp- 通過此屬性,您可以指定應用支持的“最小屏幕寬度”最大值,從而啟用屏幕兼容模式作為用戶可選的功能。如果設備的可用屏幕最小邊大于您在此處指定的值,則用戶仍可以安裝應用,但要在屏幕兼容模式下運行該應用。默認情況下,屏幕兼容模式處于停用狀態,系統通常會調整布局大小以適應屏幕大小,但用戶可以使用系統欄中出現的按鈕啟用和停用屏幕兼容模式。
如果您的應用與所有屏幕尺寸兼容,并且其布局可以適當調整大小,則無需使用此屬性。
注意:目前,屏幕兼容模式僅模擬寬度為 320dp 的手機屏幕,因此如果
android:compatibleWidthLimitDp的值大于 320,則不會應用屏幕兼容模式。此屬性是在 API 級別 13 中引入的。
android:largestWidthLimitDp- 通過此屬性,您可以指定應用支持的“最小屏幕寬度”最大值,從而強制啟用屏幕兼容模式。如果設備的可用屏幕最小邊大于您在此處指定的值,那么應用會在屏幕兼容模式下運行,且用戶不能停用該模式。
如果您的應用與所有屏幕尺寸兼容,并且其布局可以適當調整大小,則無需使用此屬性。否則,您應首先考慮使用
android:compatibleWidthLimitDp屬性。只有在以下情形才應使用android:largestWidthLimitDp屬性:您的應用在針對較大屏幕調整大小時無法正常運行,并且屏幕兼容模式是用戶使用您的應用的唯一途徑。注意:目前,屏幕兼容模式僅模擬寬度為 320dp 的手機屏幕,因此如果
android:largestWidthLimitDp的值大于 320,則不會應用屏幕兼容模式。此屬性是在 API 級別 13 中引入的。

浙公網安備 33010602011771號