サイズの異なる文字列をボタン上に配置する

ヒントはここにあったけど、惜しい、XMLからstrings.xmlのリソースを指定したいのにこの方法だとダメ。あと一歩足りない。

というわけでやり方はこちら。

MultiTextViewというカスタムViewを作成します。
仕様的にはmainTextとsubTextを指定可能とし、それぞれ、テキスト、文字サイズ、文字色を指定可能とします。

まずは、XMLから指定可能な拡張attrを定義します。
valuesフォルダ配下にattrs.xmlファイルを配置して中身をこんな感じに。
-attrs.xml















次に、MultiTextButton.javaで実装。
-MultiTextButton.java

public class MultiTextButton extends Button {

public MultiTextButton(Context context, AttributeSet attrs) {
super(context, attrs);
initAttribute(context, attrs);

TypedArray a =
context.obtainStyledAttributes(attrs, R.styleable.MultiTextButton);
CharSequence mt = a.getText(R.styleable.MultiTextButton_mainText);
CharSequence st = a.getText(R.styleable.MultiTextButton_subText);
if ( mt != null )
mainText = mt.toString();
if ( st != null )
subText = st.toString();
mainTextSize =
a.getDimension(R.styleable.MultiTextButton_mainTextSize, 10.0f);
subTextSize =
a.getDimension(R.styleable.MultiTextButton_subTextSize, 10.0f);
mainTextColor = attrs.getAttributeIntValue(null, "mainTextColor", Color.WHITE);
subTextColor = attrs.getAttributeIntValue(null, "subTextColor", Color.WHITE);
a.recycle();
}

@Override
protected void onDraw(Canvas canvas) {
// TODO 適当に描画処理。面倒なので割愛
}
}


そしたら、実際のLayout上にMultiTextButtonを配置していく。
ポイントは「app」namespace。
xmlns:app="http://schemas.android.com/apk/res/com.awwa.sample.MultiTextButton"
を定義しておくこと。
-なんちゃら.xml

android:layout_width="fill_parent"
android:layout_height="fill_parent"
app:mainText="@string/kore_ga_yaritakatta"
app:subText="直接文字だって"
app:mainTextSize="20sp"
app:subTextSize= "40sp"
/>


そもそもボタン上に違うサイズの文字なんか置くな、って言いたい。

コメント

このブログの人気の投稿

Execノードを使う

Joinノードを使う(その4)

SendGridのX-SMTPAPIヘッダの使い方(Section Tags、Substitution Tags編)