Fragment.onInflate

カスタムビューと同様に、FragmentにおいてもAndroid XMLで独自の属性をコード側に渡すことが出来る。
Fragment.onInflateで、もらえる。

Fragment  |  Android Developers

strings.xmlで、

fragment1_textview_textで、Fragment1と定義。
attrs.xmlで、

Fragment1の独自属性文字列custom_data。
fragment1_main.xmlで、

fragment1_textviewで、fragment1_textview_textをセット。
activity_main.xmlで、

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <fragment
        xmlns:app="http://schemas.android.com/apk/res/com.bgstation0.android.sample.fragment_"
	    android:id="@+id/fragment1"
	    android:name="com.bgstation0.android.sample.fragment_.Fragment1"
		android:layout_width="match_parent"
		android:layout_height="match_parent"
    	app:custom_data="ABCDE" />
    
</LinearLayout>

custom_dataは"ABCDE"。
Fragment1.javaは、

res.obtainAttributesでaを取得し、a.getStringでcustom_dataをmCustomDataに格納。

mCustomDataをtextview1.setTextでセット。

小さいけど&quot;ABCDE&quot;と出る
小さいけど"ABCDE"と出る

小さいけど"ABCDE"と出る。

"VWXYZ"にすると、

&quot;VWXYZ&quot;に変わる
"VWXYZ"に変わる

"VWXYZ"に変わる。

Sample/android/Fragment/onInflate/src/Fragment at master · bg1bgst333/Sample · GitHub

TypedArray.recycle

TypedArrayは、使い終わったらrecycleする必要がある模様。

TypedArray  |  Android Developers

以前のmixedarray取得で、ログやデバッガでrecycle前後の違いを見てみる。
MainActivity.javaで、

こんな感じでどうなるか。

before
before

before。

こうなっている
こうなっている

こうなっている。

after
after

after。

変わった。
変わった。

変わった。

ログはこんな感じで出てた
ログはこんな感じで出てた

ログはこんな感じで出てた。

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

Resources.obtainAttributes

Resources.obtainAttributesで、CustomViewの独自属性の値を取得する。

Resources  |  Android Developers

activity_main.xmlは、

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
     
	<com.bgstation0.android.sample.resources_.CustomView
	    android:id="@+id/customview1"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    app:custom_data="ABCDE"
	    app:custom_number="1" />

</LinearLayout>

app:custom_dataを"ABCDE"、app:custom_numberを1とする。
attrs.xmlを追加し、

こう定義する。
あとは、CustomView.javaで、

res.obtainAttributesでaを取得し、a.getStringでmCustomData、a.getIntでmCustomNumberを取得、あとはmCustomDataを描画テキストの文字列、mCustomNumberを文字の大きさを決定する要素にする。

この状態では、

ABCDEで1の場合
ABCDEで1の場合

ABCDEで1なのでこうなる。

VWXYZで2だと、

こうなる
こうなる

こうなる。
テキストも変わってサイズも変わる。

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

TypedArray.getColor

TypedArray.getColorで、指定されたインデックスの値を色コード16進数整数として取得。

TypedArray  |  Android Developers

とはいえ、ただのintとして返される。
activity_main.xmlで、

idにtextview1と付けて、
MainActivity.javaで、

2番目の色cをtextview1.setTextColorでセット。

ログ出力ではこうなってる
ログ出力ではこうなってる

ログ出力ではこうなってる。

textview1にセットした色は赤
textview1にセットした色は赤

textview1にセットした色は赤。

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

TextView.setTextColor

TextView.setTextColorで、TextViewのテキストの色をセットできる。

TextView  |  Android Developers

MainActivity.javaで、

tv.setTextColorでColor.REDをセット。
Color.REDなどの色はint値。

上のテキストが赤くなってる
上のテキストが赤くなってる

上のテキストが赤くなってる

Sample/android/TextView/setTextColor/src/TextView at master · bg1bgst333/Sample · GitHub

TypedArray.getString

TypedArray.getStringで、指定されたインデックスの値を文字列として取得。

TypedArray  |  Android Developers

MainActivity.javaで、

0番目の整数値に加えて、1番目の文字列も取得。

1番目の&quot;ABC&quot;を取得出来てる
1番目の"ABC"を取得出来てる

1番目の"ABC"を取得出来てる。

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

TypedArray.getInt

TypedArray.getIntで、指定されたインデックスの値をint値として取得。

TypedArray  |  Android Developers

arrays.xmlは、

整数、文字列、色。
MainActivity.javaは、

mixedarray.getIntで0番目を取得し、ログ出力。

123を取得出来てる
123を取得出来てる

0番目の123を取得出来てる。

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