<HOME

TextViewを使用してテキストを表示する30分


TextViewは、テキストを表示するためのViewコンポーネントであり、Androidプラットフォームにより提供されるAPIの一つです。

TextViewを使用して画面に任意のテキストを表示してみましょう。

  1. 「TextViewTraining」アプリを作成します。

    1. Android Studioを起動し、新規プロジェクトを作成します。

      「Welcome to Android Studio」画面の場合は、「Start a new Android Studio project」をクリックします。

      別のプロジェクトが開いている場合は、ツールバーから「File」→「New」→「New Project...」をクリックします。

    2. HelloWorldの時と同じようにプロジェクトを作成していきます。

      アプリ名は「TextViewTraining」としてください。

      今回は「Backwards Compatibility (AppCompat)」のチェックは外しておきます。

  2. TextViewに表示する文字列リソースを作成しましょう。

    1. 「strings.xml」を編集し、表示させたいテキストを文字列リソースに2つ追加してください。

      サンプル : strings.xml

      コードを表示するにはJavaScriptを有効にしてください

  3. レイアウトファイルにTextViewが既に存在するので、文字列を変更してみましょう。

    1. 「activity_main.xml」を編集し、「android:text」に、先ほど追加した文字列リソースの1つを指定してください。

      サンプル : activity_main.xml

      コードを表示するにはJavaScriptを有効にしてください

    2. アプリを実行します。

      「Hello World!」ではなく、自分が追加したテキストが表示されていればOKです。

  4. ソースコード上で、レイアウトからTextViewを取り出して使用してみましょう。

    1. ソースコードから「activity_main.xml」内のTextViewを参照できるように、TextViewにIDをつけます。

      1. 「activity_main.xml」を開きます。

      2. TextViewの属性に以下を追記します。

        コードを表示するにはJavaScriptを有効にしてください

        「android:id」で、そのViewコンポーネントにIDを指定することができます。

        通常は「@id/」+名前で、そのIDリソースを参照しますが、ここでは「@+id/」となっています。

        既に存在するリソースであれば「@~」で参照可能ですが、今回はここでIDを定義する(=まだリソースが存在しない)ので、

        「@+」で、リソースの参照と同時に追加も行っています。

        サンプル : activity_main.xml

        コードを表示するにはJavaScriptを有効にしてください

    2. ソースコードから、先ほどIDを指定したTextViewを参照します。

      1. 「MainActivity.java」を開きます。

      2. Activityがもつ「findViewById」メソッドを使用することで、IDを指定してViewインスタンスを取得することが可能です。

        取得できるViewはActivity上に存在するものになりますので、setContentViewを行った後に実行する必要があります。

      3. 以下のコードを実装してみましょう。

        コードを表示するにはJavaScriptを有効にしてください

        TextViewクラスの変数を宣言して、findViewByIdで取得したオブジェクトを代入しています。

        なお、findViewByIdの戻り値は総称型(T)ですので、キャスト不要で代入できています。

        総称型(T)は、実際の型は何か不明なので、変数の型と一致しないものであれば代入時にClassCastExceptionが発生します。

        今回は適切に実装すればTextView派生以外のクラスにならないことが明確なため、型チェックは行っていません。

        より安全に代入するには、「instanceof」を使用して型チェックを行います。

        コードを表示するにはJavaScriptを有効にしてください

        ただし、instanceofの多用は少なからずパフォーマンスに影響を与えますので、

        今回のように必要ない場合は利用を控えることをお勧めします。

    3. TextViewに設定されているテキストをソースコードから変更してみましょう。

      1. TextViewには、テキストを変更するための「setText」というメソッドが用意されています。

        setTextの引数には、文字列、または文字列リソースのIDを指定することができます。

      2. 以下のコードを実装してみましょう。

        コードを表示するにはJavaScriptを有効にしてください

        サンプル : MainActivity.java

        コードを表示するにはJavaScriptを有効にしてください

      3. アプリを実行します。

        「void setText (CharSequence text)」が表示されていればOKです。

    4. ソースコードからTextViewに文字列リソースを設定してみましょう。

      1. 先ほど実装したsetTextの引数を、リソースに追加した2つめの文字列に変更してください。

        「R.string.~」で指定します。

        コードを表示するにはJavaScriptを有効にしてください

        サンプル : MainActivity.java

        コードを表示するにはJavaScriptを有効にしてください

        ポリモーフィズム(アドホック多相)により、引数の型が異なる同名メソッドsetTextの動作が変わります。

        引数が文字列(CharSequence)の場合は「引数の文字列をTextViewで表示する」という動作でしたが、

        引数が数値(int)の場合は、「引数の数値をIDとしてもつ文字列リソースをTextViewで表示する」という動作となります。

      2. アプリを実行します。

        自分が追加したテキスト(2つめの文字列リソース)が表示されていればOKです。

  5. ソースコード上で、TextViewのインスタンスを生成してみましょう。

    1. 先ほどまではレイアウトリソースをコンテンツViewにセットしていましたが、

      今回はソースコードでTextViewを生成してコンテンツViewにセットします。

      MainActivity.javaを以下のように修正してください。

      サンプル : MainActivity.java

      コードを表示するにはJavaScriptを有効にしてください

      • 次の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        「TextView(Context context)」のコンストラクタを利用してTextViewのインスタンスを生成しています。

        引数のContextには、(Contextを継承した)Activityのインスタンスとして、MainActivity自身のインスタンス(this)を指定しています。


        Viewをnewする際のContextは、そのViewを使用するContextになるようにしてください。

        Viewが引数のContextを参照するため、別のContextでViewを使用していると、

        いつまでもView生成元のContextを解放できず、メモリリークしてしまいます。

      • 次の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        生成したTextViewをコンテンツViewに設定しています。

    2. アプリを実行します。

      「new TextView」が表示されていればOKです。

      中央ではなく、左上に表示されています。

      配置方法を指定していないため、デフォルトの表示位置となっています。

      デフォルトの幅・高さ指定が「wrap_content」(必要なだけ使う)なので、左上に必要な領域だけ表示されています。

    3. レイアウトパラメータを指定して、TextViewを画面いっぱいに使用します。

      MainActivity.javaを以下のように修正してください。

      サンプル : MainActivity.java

      コードを表示するにはJavaScriptを有効にしてください

      • 次の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        テキストの表示位置を中央に設定しています。

      • 次の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        レイアウトパラメータを生成しています。

        コンストラクタの引数で幅・高さを指定しています。

        今回はTextViewを画面いっぱいに使用するので、「MATCH_PARENT」(親Viewに合わせる)を指定しています。

      • 次の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        生成したTextViewを、レイアウトパラメータを指定してコンテンツViewに設定しています。

        第二引数で先ほど生成したレイアウトパラメータを指定しています。

    4. アプリを実行します。

      「new TextView」が画面中央に表示されていればOKです。

      テキスト表示位置がTextViewの中央、かつTextViewを画面いっぱいに設定しているので、画面中央にテキストが表示されます。

  6. TextViewで使用できるAPIのうちよく使うものを紹介します。

    これらをソースコードから利用する際のAPIについては、リンク先リファレンスの「Related methods:」に記載されていますので、そちらを参照してください。

    • android:text

      表示するテキストを指定します。
      stringリソースや、文字列を指定できます。
    • android:textAppearance

      表示するテキストのスタイルを指定します。
      (テキストの太字等のスタイルではなく、Androidのスタイルを指しています。)
      styleリソースを指定できます。
      テキストの大きさを指定するのに「@android:style/TextAppearance.Large」等を使用することが多いです。
    • android:textColor

      表示するテキストの色を指定します。
      colorリソースや、16進数表記で色の値を指定できます。
      16進数表記はRGB(#FFFFFF)または、透明度も加えたARGB(#FFFFFFFF)で指定できます。
    • android:textSize

      表示するテキストのサイズを指定します。
      dimenリソースや、数値+単位(dp等)を指定できます。
    • android:textStyle

      表示するテキストのスタイルを指定します。
      Androidのスタイルではなく、テキストのスタイルを指しています。
      「bold」(太字)、「italic」(斜体)、「normal」を指定できます。
    • android:gravity

      表示するテキストの表示位置を指定します。
      例えば、「center_horizontal」が指定されていると、水平方向の中央寄せで表示されます。
    • android:maxLines

      表示するテキストの最大行数を指定します。
      integerリソースや、整数を指定できます。
    • android:ellipsize

      テキストが収まりきらない場合の表示方法を指定します。
      例えば、maxLinesが1で「end」が指定されていると、1行に収まらなかったテキストは、最後に「…」で省略されるようになります。
    • android:editable

      このTextViewをユーザーが編集可能かどうかを指定します。
      boolリソースや、true/falseを指定できます。
    • android:inputType

      このTextViewをユーザーが編集する際の入力種別を指定します。
      例えば、「number」が指定されていると、数値入力用のソフトキーボードが表示されます。
    • android:inputType

      このTextViewが編集可能で、値が空の場合、指定されたテキストのヒントを表示します。
      stringリソースや、文字列を指定できます。

TextViewに用意されているAPIはまだまだたくさんあります。

詳細についてはAPIリファレンスに記載されています。

また、Androidは先人たちがネット上にたくさんの情報を残してくれています。

これらも活用して、是非このAPIを有効に使えるようになってください。