Android

[Android] リソースフォルダの修飾子

投稿日:

はじめに

Androidアプリではリソースフォルダ名に修飾子をつけることによって、様々な環境に合わせたリソースを適用できます。
-ja -en -zh などの修飾子でstrings.xmlを言語ごとに分けたり、 -nodpi -hdpi -xxhdpi などで端末の画素数に応じた画像を用意するなどといった方法はよく使われていますが、他にも色々な修飾子があることを知ったので、いくつか紹介したいと思います。

画面の向き

端末が縦横どちらに回転しているかでリソースを分けることができます。

  • -land : 横向き(landscape)画面用
  • -port : 縦向き(portlait)画面用

下記のように layout フォルダに修飾子をつければレイアウトのXMLファイルを、 drawable フォルダに修飾子をつければ画像を分けることができます。

画面サイズ

dp単位で画面サイズを指定し、リソースファイルを分けることができます。

  • -w[XXX]dp : 横幅がXXXdp以上の時に適用されます。「-w360dp」であれば、画面の横幅が360dp以上の時という意味になります。
  • -h[XXX]dp : 高さの指定はこちらです。「-h480dp」で高さが480dp以上の時という意味です。

テキスト入力方法

端末にハードウェアキーボードが搭載されているかどうかでリソースを分けられます。

  • -nokeys :端末にハードウェアとしてのキーボードが無い
  • -qwerty :端末にハードウェアとしてqwertyキーボードが搭載されている
  • -12key :ガラケーのような12key(「0〜9」「*」「#」)が搭載されている

複数修飾子の組み合わせ

修飾子は組み合わせることができます。
例えば res/values-ja-land/strings.xml というパス名のファイルを作成すると、「日本語環境で横向き画面の時に適用されるstrings.xml」ということになります。

ただし注意点として、複数の修飾子を組み合わせる際には、順番が決まっています。上記の例であれば、「values-land-ja」は不可になります。間違えた場合はリソースフォルダが認識されず、AndroidStudioがエラーを吐いて教えてくれます。
修飾子の順番については、公式のドキュメントにある表2の順番に従って命名してください。

「縦向きのスマートフォン」と「横向きのタブレット」では横幅に大きな違いが生じますので、上述の「画面の向き」「画面サイズ」の修飾子を組み合わせることで、最適なレイアウトを出し分けやすくなりそうです。

その他

他にも様々な修飾子があります。
APIレベルによる切り分けはよく見ると思います。 -v24 ならNougat用、 -v26 でOreo用となります。
他にも車載端末用の -car 、テレビUI用の -television 、手首に装着するデバイス用の -watch などがありました。
あらゆるデバイスに搭載されることを想定しているAndroidらしさを感じます。

さいごに

いかがでしたでしょうか。いざ調べてみると、実に多様な修飾子があることが分かりました。
修飾子によってはAPIレベルによる制限があり、今後もSDKのバージョンアップごとにどんどん追加されていくのだろうと思います。
プログラム側での不要な分岐処理を減らし、リソースファイルの管理をしやすくするために、なるべく積極的に使っていきたい機能です。

参考:リソースの提供 | Android Developers
https://developer.android.com/guide/topics/resources/providing-resources?hl=ja

blog-page_footer_336




blog-page_footer_336




-Android

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

Kotlinでクラスのネストについて

1 はじめに2 クラスのネスト3 内部クラス3.1 Javaコードとの比較4 さいごに5 おすすめ書籍 はじめに こんにちは。引き続きKotlinの基本文法で、今回はクラスのネストについてです。 Ja ...

【Kotlin】FirebaseAuthenticationでGoogle・Facebook連携する

1 はじめに2 Firebaseプロジェクトの設定3 build.gradleに追記4 Googleログイン5 Facebookログイン6 さいごに7 参考8 おすすめ書籍 はじめに はじめまして。m ...

Android 10の概要をまとめました。

1 はじめに2 主な変更点2.1 バックグラウンドからの起動について2.2 ストレージへの権限2.3 位置情報制御2.4 Live caption2.5 Smart Reply2.6 Gesture ...

Kotlinで初期化を遅延する

1 はじめに2 初期化の遅延とは3 by lazy4 lateinit5 Delegates.notNull6 さいごに7 おすすめ書籍 はじめに こんにちは、前回に引き続き、Kotlinの基本的な文 ...

Kotlin OkHttp3で通信を行なった際の備忘

1 はじめに2 ライブラリの導入方法3 Build時にエラーが発生する4 パーミッションの追加5 main関数で同期処理の通信6 onFailureでUnable to resolve host &# ...

フォロー

blog-page_side_responsive

2018年6月
 12
3456789
10111213141516
17181920212223
24252627282930

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。