著者について: CSDN コンテンツ パートナーおよび技術専門家。毎日数千万人のユーザーが利用する APP をゼロから構築しました。
Java バックエンド、モバイル開発、ビジネス実現、人工知能などに特化した、さまざまな分野のオリジナル シリーズ記事の共有に重点を置いています。皆様のサポートを願っています。
1. はじめに
私たちはAndroid の基本知識の要約と学習を続け、過去を振り返り、新しいことを学びます。
リソースとは、コードで使用される追加のファイルと静的コンテンツ (ビットマップ、レイアウト定義、インターフェイス文字列、アニメーションの説明など) を指します。
このドキュメントでは、Android プロジェクト内のリソースをグループ化する方法について説明します。また、特定のデバイス構成に代替リソースを提供する方法と、アプリケーション コードまたは他の XML ファイルからこれらのリソースにアクセスする方法についても説明します。
2. 概要
プロジェクトにはres フォルダがあり、すべてのリソースが含まれています。このフォルダの下に、リソースの種類に応じて新しいディレクトリを作成しますさまざまな種類のリソースを保存します。
3. リソースタイプのグループ化
リソースの種類に応じて、大きく次の種類に分類できます。
目次 | リソースの種類 |
---|---|
アニメーター | プロパティアニメーションを定義するために使用されるXMLファイル。 |
六 | モーション トゥイーンを定義するために使用される XML ファイル。プロパティ アニメーションもこのディレクトリに保存できますが、2 つのタイプを区別するために、プロパティ アニメーションには animator/ ディレクトリが優先されます。 |
色 | 色の状態のリストを定義する XML ファイル。詳細については、「ColorStateList」を参照してください。 |
描画可能 | 次のドローアブル リソース サブタイプにコンパイルされたビットマップ ファイル (PNG、.9.png、JPG、または GIF) または XML ファイル |
ミップマップ | さまざまなランチャー アイコン密度の描画可能ファイル。ミップマップ フォルダーを使用してランチャー アイコンを管理する方法の詳細については、「ミップマップ ディレクトリへのアプリ アイコンの配置」を参照してください。 |
レイアウト | インターフェースのレイアウトを定義するために使用される XML ファイル。詳細については |
メニュー | オプション メニュー、コンテキスト メニュー、サブメニューなどのアプリケーション メニューを定義する XML ファイル。 |
生 | 元の形式で保存する必要があるファイル。生の InputStream を使用してこれらのリソースを開くには、リソース ID (つまり、R.raw.filename) を指定して Resources.openRawResource() を呼び出します。ただし、元のファイル名とファイル階層にアクセスするには、(res/raw ではなく) アセット ディレクトリにアセットを保存することを検討してください。 アセット内のファイルにはリソース ID がないので、AssetManager を使用してのみ読み取ることができます。 |
価値観 | 文字列、整数、色などの単純な値を含む XML ファイル。 value ディレクトリ内のファイルには複数のリソースを記述することができます。このディレクトリ内のファイルの場合、要素の各子要素はリソースを定義します。たとえば、要素は R.string リソースを作成し、要素は R.color リソースを作成します。 |
XML | Resources.getXML() を呼び出すことで実行時に読み取ることができる任意の XML ファイル。さまざまな XML 構成ファイル (検索構成など) をここに保存する必要があります。 |
フォント | 拡張子 (TTF、OTF、TTC など) が付いたフォント ファイル、または要素を含む XML ファイル。フォントをリソースとして使用する方法の詳細については、「フォントを XML リソースとして追加する」を参照してください。 |
4. 修飾子名テーブルを設定する
さまざまなデバイスに適応させる必要がある場合、リソースも複数のセットに適応させる必要があります。命名形式は次のとおりです。
<resources_name>-<qualifier>
<resources_name> 是相应默认资源的目录名称(如上面表格 中所定义 values , drawable)。
<qualifier> 是指定要使用这些资源的各个配置的名称(如表 下表 中所定义),可以追加多个 <qualifier>,并使用短划线进行分隔。
drawable-hdpi
drawable-night-hdpi
修飾子の値 | 設定手順 |
---|---|
MCCとMNC | モバイル国コード (MCC)、オプションでデバイスの SIM カードのモバイル ネットワーク コード (MNC) が続きます。例: mcc310、mcc310-mnc004、mcc208-mnc00 |
英語、フランス語など。 | アプリのローカリゼーションのための言語、スクリプト (オプション)、および地域 (オプション) |
ldrtl、ldltr | アプリケーションのレイアウト方向、ldrtlは「右から左へのレイアウト方向」を指します。 ldltr は、「左から右へのレイアウト方向」を意味します (デフォルトの暗黙の値)。 |
swdp | 最小幅、アプリケーションで使用可能な画面領域の最小サイズ、例: sw320dp、sw600dp、sw720dp など。 |
wdp、hdp | 使用可能な幅と高さ。リソースで使用される最小の使用可能な画面の幅または高さを指定します (dp 単位で、値によって定義されます)。例: w720dp、w1024dp、h720dp、h1024dp など。 |
小、普通、大、特大 | 画面サイズ |
長い、長くない | 画面のアスペクト比 |
丸い、丸くない | 丸いスクリーン |
ワイドCG、ノワイドCG | 広い色域 |
ハイドル、ロードル | ハイダイナミックレンジ(HDR) |
港、陸地 | 画面の向き |
車、机、テレビ、家電、時計、VRヘッドセット | インターフェイス モード (車、デスクトップ、テレビ、ディスプレイなし、時計、仮想現実ヘッドセットなど) |
夜、夜中 | ナイトモード |
ldpi、mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi、nodpi、tvdpi、anydpi、nnndpi | 画面のピクセル密度 (dpi) |
ノータッチ、フィンガー | タッチスクリーンのタイプ。例: デバイスにタッチスクリーンがないか、ユーザーが指を使って直接操作できるように設計されたタッチスクリーンがデバイスにあります。 |
キー公開、キー非公開、キーソフト | キーボードの利用可能性 |
nokeys、qwerty、12key | 本文入力方法 |
ナビ露出、ナビ非表示 | ナビゲーションキーの可用性 |
v3、v4、v7 など。 | プラットフォーム バージョン (API レベル)、デバイスによってサポートされる API レベル。たとえば、v1 は API レベル 1 (Android 1.0 以降を実行しているデバイス) に対応し、v4 は API レベル 4 (Android 1.6 以降を実行しているデバイス) に対応します。これらの値の詳細については、Android API レベルのドキュメントを参照してください。 |
- ldpi:低密度屏幕;约为 120 dpi。
- mdpi:中密度(传统 HVGA)屏幕;约为 160 dpi。
- hdpi:高密度屏幕;约为 240 dpi。
- xhdpi:超高密度屏幕;约为 320 dpi。此项为 API 级别 8 中的新增配置。
- xxhdpi:超超高密度屏幕;约为 480 dpi。此项为 API 级别 16 中的新增配置。
- xxxhdpi:超超超高密度屏幕使用(仅限启动器图标,请参阅支持不同的像素密度);约为 640 dpi。此项为 API 级别 18 中的新增配置。
这六种主要密度之间的缩放比例为 3:4:6:8:12:16(tvdpi 密度忽略不计)。因此,9x9 (ldpi) 位图相当于 12x12 (mdpi)、18x18 (hdpi)、24x24 (xhdpi) 位图,依此类推。
- nodpi:用于您不希望为匹配设备密度而进行缩放的位图资源。
- tvdpi:密度介于 mdpi 和 hdpi 之间的屏幕;约为 213 dpi。这不属于“主要”密度组。它主要用于电视,而大多数应用都不需要它。对于大多数应用而言,提供 mdpi 和 hdpi 资源便已足够,系统将视情况对其进行缩放。此项为 API 级别 13 中的新增配置。
- anydpi:适合所有屏幕密度,其优先级高于其他限定符。这对于矢量可绘制对象非常有用。此项为 API 级别 21 中的新增配置。
- nnndpi:用于表示非标准密度,其中 nnn 是正整数屏幕密度。大多数情况下不使用此限定符。使用标准密度存储分区,可显著减少因支持市场上各种设备屏幕密度而产生的开销。
5. 修飾子の命名規則
構成修飾子名を使用するときに従うべきルールをいくつか示します。
- リソースの単一セットに対して複数の修飾子をダッシュで区切って指定できます。たとえば、drawable-en-rUS-land は、横向きで米国英語のデバイスで動作します。
- これらの修飾子は、上の表にリストされている順序に従う必要があります。
错误:drawable-hdpi-port
正确:drawable-port-hdpi
- 代替リソース ディレクトリはネストしてはなりません。たとえば、ディレクトリを res/drawable/drawable-en/ にすることはできません。
- 値の大文字と小文字は区別されません。
- 修飾子のタイプごとに 1 つの値のみがサポートされます。
错误:drawable-es-fr
正确:drawable-es 和 drawable-fr