[Android]resフォルダに入れた複数の画像をxmlファイルで配列管理する方法(TypedArrayの使い方)

resフォルダに格納した複数の画像を、ソースコード内ではなくxmlファイル内で配列管理して、それをソースコードで使えるようにする方法です。

 

1.任意のxmlファイルに配列管理したい画像の整数配列(integer-array)を設定する

動画の解説内では、「strings.xml」に設定していますが、<resources>タグで括ってさえいれば、どのxmlファイルに記述しても問題ないそうです(引用参照)。

<resources>
    <integer-array name="background_list">
        <item>@drawable/back001</item>
        <item>@drawable/back002</item>
        <item>@drawable/back003</item>
       
       
        <item>@drawable/back098</item>
        <item>@drawable/back099</item>
        <item>@drawable/back100</item>
    </integer-array>

</resources>

 A typed array is a simple resource that is referenced using the value provided in the name attribute (not the name of the XML file). As such, you can combine typed array resources with other simple resources in the one XML file, under one <resources> element.

 

2.1で設定した配列をソースコードで使う

たとえば、こんな感じで

val backGroundArray = resources.obtainTypedArray(R.array.background_list) :①
val backGroundRes = backGroundArray.getResourceId(0, -1) :② 第一引数が配列のインデックス
constraintLayout.setBackgroundResource(backGroundRes)   :③
backGroundArray.recycle() ← 最後はTypedArray#recycle()を使わないといけないらしい :④
  1. Resources#obrainTypedArray()で、xmlで設定した配列を取得
  2. Resources#getResourcesId(配列のインデックス, デフォルト値)で、配列内で使いたい画像のリソースIDを取得
  3. 画面の背景に②で取得したリソースIDの画像を表示
  4. TypedArray#recycle()で、①で取得した配列のリサイクル

(詳しくは下の動画で解説していますので、よろしければご覧ください)

アバター

北川 博之(きーぼー)

みんなのプログラミング by Telulu LLC代表 大阪府生まれ。京都大学経済学部経済学科卒業。 2000年より、日本生命保険、ニッセイアセットマネジメント、パトナム・インベストメンツ(米国)で、日本株トレーダー・アナリスト、経営企画、システム開発等の業務に従事。主に日本株の売買執行・投資分析、経営計画の策定、海外投資家向け日本株営業、社内トレーディングシステム及び経理システムの開発等を行う。 2016年、合同会社てるる設立。スマホアプリプログラマーとして「新感覚脳トレアプリ・記憶戦隊オボエルンジャー」「Meisoー1番シンプルなマインドフルネス瞑想アプリ」をはじめとした、メンタルヘルス・知育系アプリを中心に4タイトル・計8本(Android・iOS)をリリース。 2017年、自身のこれまでの社会人経験・プログラミング経験・子育て経験を基に、プログラミングを通じて人々の人生を豊かにして、未来に希望の持てる明るい社会の実現に貢献したいとの想いから、プログラミング完全初心者と挫折経験のある人を支援する「プログラミング挫折撲滅プロジェクト・みんなのプログラミング by Telulu LLC」を設立し、プログラミングサポーター活動と心理カウンセリング活動を開始。これまでに3,000名を超える方のプログラミング挫折撲滅をサポート。

こんな記事も読まれています

みんプロにかける想い

  1. プログラミングは手段の1つに過ぎない(目的は自分のアイデアを形にすること)

  2. プログラミングはみんなのもの!(プログラミングの醍醐味である「楽しさ」を伝えたい)

  3. こんな無駄な苦労をするのはぼくで最後にしたい(ぼくがプログラミング講座をはじめたわけ)

  4. プログラミングを通じて「やわらかい世の中」を作りたい(ぼくがプログラミング講座をやっている本当の理由②)

  5. ぼくが別に言う必要のない挫折の黒歴史をあえてさらけ出している理由(自分の中にある「ブロック」を外すきっかけにしてほしい)

みんプロ作成アプリ




みんプロ代表の黒歴史


TOP