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

【Android】TextViewの特定のテキストだけを太字にする方法

このチュートリアルでは、AndroidアプリのTextViewに表示する文字列のうち、特定の部分だけを太字にする方法を解説します。

TextView全体を太字にするだけであれば android:textStyle="bold" 属性で十分ですが、文字列のごく一部だけスタイルを変えたい場合は、SpannableStringStyleSpan を組み合わせるのが定番の手法です。

手順1:新規プロジェクトを作成する

まず、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"
   android:id="@+id/coordinator_layout"
   android:layout_width="match_parent"
   android:layout_height="match_parent">
   <TextView
      android:id="@+id/textView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textSize="40sp"
      android:layout_gravity="center"
      android:layout_margin="25dp" />
</RelativeLayout>

このレイアウトでは、テキストサイズ40spのTextViewを1つ配置しています。

手順3:MainActivity.javaの実装

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

import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.StyleSpan;
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 = (TextView) findViewById(R.id.textView);
      String text = "My favourite food is Biriyani";
      SpannableString ss = new SpannableString(text);
      StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
      ss.setSpan(boldSpan, 21, 29,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
      textView.setText(ss);
   }
}

コードのポイント

  • SpannableString:文字列全体を保持しながら、部分的な装飾(スパン)を設定できるクラスです。
  • StyleSpan(Typeface.BOLD):太字スタイルを表すスパンオブジェクトです。
  • setSpan():第2引数が適用開始位置、第3引数が適用終了位置(終了位置は範囲に含まれません)。この例では「My favourite food is Biriyani」の21〜29文字目、つまり「Biriyani」の部分にのみ太字が適用されます。

※新しいバージョンのAndroid Studioではサポートライブラリ(android.support)が非推奨となっているため、android.support.v7.app.AppCompatActivity の代わりに 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" >
   <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>

アプリを実行する

それでは、アプリケーションを実行してみましょう。実機のAndroid端末をパソコンに接続しているものとします。Android Studioからアプリを起動するには、プロジェクト内のアクティビティファイルを開き、ツールバーのRunアイコンをクリックします。実行するデバイスを選択すると、接続した端末に次のような画面が表示されます。

【Android】TextViewの特定のテキストだけを太字にする方法

まとめ

SpannableStringStyleSpan を使えば、TextView内の任意の範囲にあるテキストだけを太字にできます。setSpan() の開始位置・終了位置を変更すれば、好きな箇所へ自由にスタイルを適用できるため、キーワードの強調表示などにぜひ活用してください。

  1. 【Android】TextViewでテキストを両端揃え(ジャスティファイ)表示する方法を徹底解説

    この記事では、AndroidアプリのTextViewでテキストを両端揃え(ジャスティファイ)表示する方法を、実際のサンプルコードをもとに段階的に解説します。RecyclerViewを使ったリスト表示の実装例もあわせて紹介するので、Androidアプリ開発の基礎固めとしても役立つ内容です。 手順1:Android Studioで新規プロジェクトを作成する まずはAndroid Studioを起動し、メニューから「File」→「New Project」を選択します。必要な設定項目をすべて入力して、新しいプロジェクトを作成しましょう。 手順2:res/layout/activity_main.xml

  2. TkinterでEntryウィジェット内の特定テキストを削除できないようにする方法

    Tkinterには、ユーザーがテキストを入力するための基本的なウィジェットとして、TextウィジェットとEntryウィジェットの2種類があります。Textウィジェットは複数行の入力を受け付ける場合に一般的に使われ、Entryウィジェットでは1行のみのテキスト入力が可能です。これらのウィジェットは、標準ライブラリの関数やメソッドを活用することで自由にカスタマイズでき、追加機能を実装することもできます。Entryウィジェットに入力された値を検証(バリデーション)するには、register()メソッドを使用します。このメソッドは、後からコールバック関数を呼び出すために利用できる文字列を返します。va