TypedArray

TypedArrayは、型情報付きの配列オブジェクト。
中身どうなってるかもうちょっとみる。

TypedArray  |  Android Developers

arrays.xmlを、

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="mixedarray">
        <item>123</item>
        <item>456</item>
        <item>789</item>
    </array>
</resources>

とすると、

123, 456, 789が見える
123, 456, 789が見える

123と456と789が、少し間隔を開けて、見える。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="mixedarray">
        <item>123</item>
        <item>ABC</item>
        <item>789</item>
    </array>
</resources>

とすると、

ABCはどこへ行ったのだろうか
ABCはどこへ行ったのだろうか

ABCはどこへ行ったのだろうか。

3つ目を16進数の赤色表現に。

-65536ってのが赤色表現かな
-65536ってのが赤色表現かな

-65536ってのが赤色表現かな。
整数にできるやつは残ってる。

Sample/android/TypedArray/TypedArray/src/TypedArray at master · bg1bgst333/Sample · GitHub

Resources.obtainTypedArray

異なる要素型が混在する配列の場合は、TypedArrayで取得し、1つ1つの要素を適切な型で取得しなければならない。
Resources.obtainTypedArrayを使って、TypedArrayを取得する。

Resources  |  Android Developers
Android, arrays.xml で定義した配列を利用する : Serendip – Webデザイン・プログラミング

arrays.xmlで、

arrayタグで、名前は"mixedarray"とする。
整数値、文字列、色の16進数表現。
MainActivity.javaで、

res.obtainTypedArrayに、R.array.mixedarrayを指定して、mixedarrayを取得。
取得したmixedarrayを、toStringで文字列出力してみる。

なんだかよくわからない配列になっている
なんだかよくわからない配列になっている

なんだかよくわからない配列になっている。
こうやって保持されているようだ。

Sample/android/Resources/obtainTypedArray/src/Resources at master · bg1bgst333/Sample · GitHub

Resources.getStringArray

文字列配列もXMLで定義できる。
Resources.getStringArrayを使う。

Resources  |  Android Developers

arrays.xmlで、

string-arrayタグを使う。
itemの値の文字列にダブルクォートを付けない。
MainActivity.javaで、

res.getStringArrayに、R.array.abcdefghiを指定して、abcdefghiを取得。

文字列配列取得できた
文字列配列取得できた

文字列配列取得できた。

Sample/android/Resources/getStringArray/src/Resources at master · bg1bgst333/Sample · GitHub

Resources.getIntArray

リソースのXMLは、整数配列も定義できる。
整数配列の取得は、Resources.getIntArrayを使う。

Resources  |  Android Developers

Android XMLを追加し、

arrays.xmlと名付ける
arrays.xmlと名付ける

arrays.xmlと名付ける。
arrays.xmlで、

integer-arrayタグで、名前は"onetwothree"。
itemタグで値を指定。
MainActivity.javaで、

res.getIntArrayに、R.array.onetwothreeを指定し、int配列onetwothreeを取得し、あとは各々の値を出力。
("R."の後ろは、ファイル名の"arrays"ではなく"array"。)

整数配列も取得できた
整数配列も取得できた

整数配列も取得できた。

Sample/android/Resources/getIntArray/src/Resources at master · bg1bgst333/Sample · GitHub

Resources.getInteger

リソースのXMLに整数を定義して、それを取得する。
Resources.getIntegerを使う。

Resources  |  Android Developers

また、

Android XMLを追加
Android XMLを追加

Android XMLを追加。

integer.xml
integer.xml

integer.xmlとする。

この辺は特に変わらない
この辺は特に変わらない

この辺は特に変わらない。
integer.xmlで、

integerタグで、名前が"ten"で、値が10。

res.getIntegerに、R.integer.tenを指定すると、tenに10が入る。

tenは10
tenは10

tenは10。

Sample/android/Resources/getInteger/src/Resources at master · bg1bgst333/Sample · GitHub

AttributeSet.getAttributeCount

AttributeSet.getAttributeCountで、属性の数を取得する。

AttributeSet  |  Android Developers

CustomView.javaで、

属性の数が取得出来れば、このようにfor文で回せる。

楽に取得と出力が出来る
楽に取得と出力が出来る

楽に取得と出力が出来る。

Sample/android/AttributeSet/getAttributeCount/src/AttributeSet at master · bg1bgst333/Sample · GitHub

AttributeSet.getAttributeValue

AttributeSet.getAttributeValueで、属性の値を取得する。

AttributeSet  |  Android Developers

CustomView.javaで、

今度は、attrs.getAttributeValueで、各々の値を取得して、ログ出力。

ABCDEは文字列として取得できるが、それ以外はよくわからない値。
ABCDEは文字列として取得できるが、それ以外はよくわからない値。

ABCDEは文字列として取得できるが、それ以外はよくわからない値。
idは、idの指すアドレス(?)、layout_widthやlayout_heightは、enumで定義された値を出しているっぽい。
この辺は、XMLの内部参照を解決してないみたい。
だから、AttributeSet.getAttributeValueで属性値を取得するのは、得策ではない。

Sample/android/AttributeSet/getAttributeValue/src/AttributeSet at master · bg1bgst333/Sample · GitHub