AdSheepは、新米バックエンドエンジニアの技術分野に留まらないライフハック風ブログです

動的に生成したTextViewの枠にデザインをつける

Android

どうも、ShouNです。
TextViewの縁にだけ色をつけて枠として使いたい場面がありました。
通常であれば、layoutファイル内のTextViewの属性にandroid:background=”@drawable/****.xml”の形式で指定すればデザインが反映されます。
今回は、最初からLayout.xmlで定義するのではなく、Activityの処理で動的に生成したTextViewを枠に使います。

TextViewをLayoutにはめこんで土台となるLayoutにAddView

まずは基礎となるLinearLayoutを用意します。
こちらは最初からLayout.xmlに用意してあればファイルからfindByid()を使っても良いです。
今回は枠を画面の中心に表示させたかったので、Gravityを指定するためにもうひとつ、frameLayoutという名前でLinearLayoutを用意しています。

LinearLayout baseLayout = new LinearLayout(this);
LinearLayout frameLayout = new LinearLayout(this);
TextView frame = new TextView(this);
frame.setHeight(300);
frame.setWidth(800); //この二つが枠の大きさになる
// 枠のスタイルを読み込む
frame.setBackgroundResource(R.drawable.frame_style);
// 枠をはめ込むレイアウトの位置を中央に(枠が画面中央に表示される)
frameLayout.setGravity(Gravity.CENTER);
// レイアウトに枠をはめ込む
frameLayout.addView(frame);
// 枠をはめ込んだレイアウトを土台のレイアウトにはめ込む
baseLayout.addView(frameLayout);

枠のデザインを指定したframe_style.xmlを、res/drawable下に用意する

枠のデザインファイルを用意します。
中身は以下のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke
        android:width="2px"
        android:color="#000000"
        />
    <padding android:left="2px"
        android:top="2px"
        android:right="2px"
        android:bottom="2px" />
</shape>

これで画面中央に背景透過の黒い枠組みが表示されるはずです。

まとめ

frame.setText();で文字列を指定すれば枠内に文字が表示されます。
文字を中央揃えにするにはframe.setGravity(Gravity.CENTER);を使います。
背景を透過せずに色を付ける場合、frame_style.xmlに“を追加することで任意の背景色をつけることができます。

 

ShouN
ShouN

処理の分岐に応じて動的にレイアウトを生成することは多いと思います。そのレイアウトに好みのデザインをつけたり、調整するのはLayoutファイルに直接記述する方法とはかなり異なるので、慣れておきたいですね

コメント