TextView をレイアウトファイルを使わずに記述するやり方です。ダイナミックにテキストを変えたい時にはこれを使わないとできません。
2021.1.1
TextView
TextViewをJavaコードで記述することのメリットは、ダイナミックに変更できる点です。レイアウトXMLファイルは静的なので途中で変更できません。
一方デメリットとしては、コード量が増大しがちでレイアウトファイルのように感覚的に作ることもできません。ただ、レイアウトファイルで作成した後で部分的にコードで変更することは可能です。
なお、ここで紹介するのはLinearLayoutのケースです。ConstraintLayoutはこれよりは多少ややこしくなります。
コード化のポイント
テキストやボタンといった部品を配置するためには setContentView を使いますが、今回はレイアウトXMLファイルである activity_main.xml を使わないやり方です。
setContentView:
その名の通り、スクリーン画面にViewを設定するメソッドです。
設定されるViewはLayout形式でまとめられたViewグループになります。
setContentViewのメソッドは引数の取り方でいくつかあります
- setContentView(int layoutResID)
- レイアウトXMLファイルのIDを指定
- setContentView(View view)
- 簡略形です。今回はこれを使います
- setContentView(View view, ViewGroup.LayoutParams params)
Ref: Android Developer
例としてLinearLayoutを setContentView に設定してみます。
1 2 3 4 5 6 |
// LinearLayoutのインスタンス作成 LinearLayout linearLayout = new LinearLayout(this); // LinearLayoutの特徴としてorientation(方向)を決る linearLayout.setOrientation(LinearLayout.VERTICAL); // setContentViewに設定 setContentView(linearLayout); |
このLinearLayoutに入れるTextView のインスタンスを作成します
1 |
TextView textView = new TextView(this); |
表示するテキストを設定して
1 |
textView.setText("Test TextView"); |
TestViewの縦横の属性をWRAP_CONTENTとして追加
1 2 3 4 |
linearLayout.addView(textView, new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); |
これで出来上がりです
サンプルコード
プロジェクトを作成しますが、プロジェクトの作り方の説明は「簡単な Button アプリを作る」を見てください
デフォルトでファイルが出来上がります。
MainActivity.java
これに以下のように記述していきます。
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
//package your.package.name; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.LinearLayout; import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 今回は使いません //setContentView(R.layout.activity_main); // レイアウトの設定 LinearLayout linearLayout = new LinearLayout(this); // 垂直方向 linearLayout.setOrientation(LinearLayout.VERTICAL); // linearLayoutをContentViewにセット setContentView(linearLayout); // TextView インスタンス生成 TextView textView = new TextView(this); String str = "Test TextView"; textView.setText(str); linearLayout.addView(textView, new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); } } |
こんな感じで出来上がりました。
サンプルコード(修正)
テキストフォントが小さく、レイアウトも偏っているので少し手を加えて見た目をよくしましょう。
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
//package your.package.name; import androidx.appcompat.app.AppCompatActivity; import android.graphics.Color; import android.os.Bundle; import android.util.TypedValue; import android.view.Gravity; import android.widget.LinearLayout; import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 今回は使いません //setContentView(R.layout.activity_main); // レイアウトの設定 LinearLayout linearLayout = new LinearLayout(this); // 垂直方向 linearLayout.setOrientation(LinearLayout.VERTICAL); // レイアウト中央寄せ linearLayout.setGravity(Gravity.CENTER); // linearLayoutをContentViewにセット setContentView(linearLayout); // TextView インスタンス生成 TextView textView = new TextView(this); String str = "Test TextView"; textView.setText(str); // テキストカラー textView.setTextColor(Color.rgb(0x0, 0x0, 0xaa)); // テキストサイズ textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 50); linearLayout.addView(textView, new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); } } |
多少マシになりましたでしょうか。
関連ページ:
Reference:
Android Developer