ココでわかるAndroidアプリ開発

あなたのプログラミングを徹底サポート

【Android】リソースとは - 意味や使い方を解説

  • 作成日:2022/01/21
  • 更新日:2023/01/11

Androidアプリ開発におけるリソースについて解説します。

リソースとは

リソースとは画像や定義ファイルなどの総称です。 リソースはAndroid Studioでresフォルダに格納されています。

リソースとは1

画像ファイルはdrawableフォルダへ、定義ファイルはvalueフォルダへ配置するなど、フォルダ毎に用途は異なりますが、 これらのファイル全てがリソースファイルとなります。

リソースID

resフォルダ内にある1ファイルにつき1つリソースIDが割り当てられます。 リソースIDとは、リソースファイルを特定するためにつけられた一意の数値であり、 ビルドをすると自動的に付与されます。

確認方法

以前はR.javaというファイル内にリソースIDが記述されていたのですが、 Android Studio 3.6以降、R.javaは廃止されました。

代わりにR.txtというファイル内でリソースIDを管理しています。

R.txtの場所

app\build\intermediates\runtime_symbol_list\debug\R.txt

R.txtの中身は以下のようにファイルに対して1つのID(0xXXXXXなど)が付与されています。

リソースとは2

valuesフォルダは特別

先ほど1ファイルにつき1リソースIDが付与されると書きましたが、valuesフォルダ内にあるファイルだけは特別で、 ファイル内の1要素につき1リソースIDが付与されます。

例えば、valuesフォルダ内のcolors.xmlというファイルを見てみましょう。 色を定義する7つの要素が記述されていますね。

リソースとは3

この場合、リソースIDは7つとなります。

このように、valuesフォルダ内にあるファイルは、1ファイルにつき1リソースIDでなく、 1要素につき1リソースIDが付与されます。

リソースを読み込む

プログラム内でリソースを使いたい場合、そのリソースを読み込む必要があります。 javaなどのソースファイル内から読み込む方法とxmlファイル内から読み込む方法があります。

ソースファイルから読み込む

ソースファイルで指定する場合は、「R.種類.リソース名」と書きます。7行目の引数にご注目ください。

MainActivity.java

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.activity_main);        
    }
}          

これはよくみる構文ですね。setContentViewはレイアウトファイルを読み込むメソッドであり、 その引数として読み込みたいリソースを指定します。

上記の例だとactivity_mainというリソースファイルを読み込むので、「R.layout.activity_main」と記述しています。

XMLファイルから読み込む

xmlファイル内からリソースファイルを読み込むことも可能です。 その場合、「@/リソース種類/リソース名」と書きます。

以下の16行目にご注目ください。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/txt1"
        android:layout_width="250dp"
        android:layout_height="50dp"
        android:textColor="#000"
        android:text="テキスト1"
        android:textSize="30sp"
        android:background="@color/purple_200"
        android:gravity="center_horizontal"
        />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

TextViewに色々な設定をしていますが、16行目の背景の設定ではcolor.xmlファイルのpurple_200というリソースを読み込んでいます。

color.xmlファイルの内容は次の通りです。4行目のリソースを指定して読み込んでいました。

color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="purple_200">#FFBB86FC</color>
    <color name="purple_500">#FF6200EE</color>
    <color name="purple_700">#FF3700B3</color>
    <color name="teal_200">#FF03DAC5</color>
    <color name="teal_700">#FF018786</color>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
</resources>

ビューの一括指定

リソースを活用すれば複数のビューにまとめて同じ属性を付与することができます。 後からボタンのスタイルに変更があった場合、一括して変更できるので覚えておくと便利です

では、複数のボタンに対し同じ属性を付与するサンプルを紹介します。 まず、以下のようなボタンが3つあるとします。

activity_main.xml

            <Button
                android:id="@+id/btn1"
                android:text="1"
                style="@style/DefStyle"
                />
            <Button
                android:id="@+id/btn2"
                android:text="2"
                style="@style/DefStyle"
                />
            <Button
                android:id="@+id/btn3"
                android:text="3"
                style="@style/DefStyle"
                />

5行目、10行目、15行目でstyle.xmlファイルの「DefStyle」というスタイルを読み込み、 3つのボタン全てに同じスタイルを設定しています。 style.xmlはどこにあるのかというと、resフォルダ内のvalueフォルダに新規作成しました。

styleの場所

中身は次のようにしています。

style.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="DefStyle">
        <item name="android:layout_width">80dp</item>
        <item name="android:layout_height">80dp</item>
        <item name="android:textSize">30sp</item>
    </style>
</resources>

DefStyleでは横縦幅やテキストサイズを指定していますね。

このように、リソースに共通のスタイルを記述しておき、 それを読み込むことで、一括してビューのスタイルを設定できます。

この記事のシェアはこちらから

カテゴリー

カテゴリーの一覧です。

Contact

当サイトへのご連絡は以下よりお願いします。

© Copyright 2022 ココでわかるAndroidアプリ開発