Android
 Computer >> コンピューター >  >> プログラミング >> Android

【Android開発】TextViewのSpan(文字列の一部)に色を設定する方法を解説

この記事では、AndroidアプリでTextView内の特定の文字列(Span)に色を設定する方法を、実際のサンプルコードとともに解説します。SpannableStringForegroundColorSpanを組み合わせれば、1つのTextViewの中でも部分的にテキストの色を変更できます。

手順1:Android Studioで新規プロジェクトを作成

Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目を入力して、新しいプロジェクトを作成してください。

手順2:レイアウトファイル(activity_main.xml)を編集する

res/layout/activity_main.xml に以下のコードを追加します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/textView"
        android:textSize="16sp"
        android:padding="12sp"
        android:textStyle="bold|italic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"/>
</RelativeLayout>

ここでは、画面中央に配置されたTextViewを1つ定義しています。テキストサイズは16sp、スタイルは太字かつ斜体に設定しています。

手順3:MainActivity.java を実装する

src/MainActivity.java に以下のコードを記述します。

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
        String text = "I appreciate the prayer but I've already got God on my side";
        SpannableString spannableString = new SpannableString(text);
        ForegroundColorSpan foregroundColorSpanCyan = new ForegroundColorSpan(Color.CYAN);
        ForegroundColorSpan foregroundColorSpanBlue = new ForegroundColorSpan(Color.BLUE);
        ForegroundColorSpan foregroundColorSpanGreen = new ForegroundColorSpan(Color.GREEN);
        spannableString.setSpan(foregroundColorSpanCyan, 3, 15, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableString.setSpan(foregroundColorSpanBlue, 22, 31, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableString.setSpan(foregroundColorSpanGreen, 38, 49, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        textView.setText(spannableString);
    }
}

コードのポイント

このサンプルの仕組みは以下の通りです。

  • SpannableString: 文字列全体を保持しつつ、部分ごとに装飾を適用できるクラスです。
  • ForegroundColorSpan: 指定した範囲の文字色を変更するスパンです。ここではシアン・ブルー・グリーンの3色を使用しています。
  • setSpan(): 第1引数にスパン、第2・第3引数に適用範囲(開始位置と終了位置)、第4引数にフラグ(SPAN_EXCLUSIVE_EXCLUSIVE)を指定します。

なお、新しいプロジェクトではサポートライブラリの代わりにAndroidXが使われるため、インポート文は androidx.appcompat.app.AppCompatActivity に読み替えてください。

手順4:AndroidManifest.xml を確認する

androidManifest.xml は以下のようになります。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
        </activity>
    </application>
</manifest>

※今回のサンプルでは特別な権限は不要のため、READ_PHONE_STATEのパーミッション宣言は削除しても問題ありません。

アプリを実行して動作を確認しよう

それでは、アプリを実行してみましょう。実機のAndroidスマートフォンをPCに接続していることを前提としています。Android Studioでプロジェクトのアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。接続したモバイルデバイスを選択すると、端末の画面に以下のように表示されます。

【Android開発】TextViewのSpan(文字列の一部)に色を設定する方法を解説

  1. 【Android開発】カラー整数(int)を16進数カラーコード文字列に変換する方法

    Androidアプリ開発では、色情報がint型の整数値として扱われることが多く、これを「#FF5733」のような16進数のカラーコード文字列に変換したいケースがあります。本記事では、Integer.toHexString()メソッドを使ってカラー整数を16進文字列に変換する方法を、実際のサンプルプロジェクトとともにわかりやすく解説します。変換の仕組みAndroidでは、色はARGB形式(アルファ・赤・緑・青)の32ビット整数として表現されます。そのため、-16895234のような負の値も有効なカラー整数です。Integer.toHexString(int)で16進文字列に変換した後、先頭2桁は

  2. 【Android】エミュレータのIPアドレスを取得して表示する方法を解説

    はじめにこの記事では、Androidアプリから端末(エミュレータ/実機)のIPアドレスを取得し、画面に表示する方法を、実際のサンプルコードとともにステップ形式で解説します。Wi-Fi接続情報を利用したシンプルな実装例なので、Android開発初心者の方にもわかりやすい内容となっています。手順1:新規プロジェクトの作成まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目を入力してプロジェクトを作成してください。手順2:レイアウトファイル(activity_main.xml)の編集res/layout/acti