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

KotlinでAndroidのTextViewスタイルを実行時に動的に変更する方法【初心者向け解説】

この記事では、Kotlinを使ってAndroidアプリのTextViewのスタイルを実行時に動的に変更する方法を、ステップごとにわかりやすく解説します。ボタンやテキストをタップしたタイミングで文字色やフォントスタイルを切り替えたい場合に役立つテクニックです。

完成イメージ

画面中央のTextViewをタップすると、あらかじめ定義しておいた「太字+斜体+白文字」のスタイルが適用され、背景色もハイライトカラーに変化します。

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

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

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

res/layout/activity_main.xml に以下のコードを追加します。画面上部には装飾済みのTextView、中央にはタップ対象となるTextView(ID: textView)を配置しています。

<?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:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="70dp"
        android:background="#008080"
        android:padding="5dp"
        android:text="TutorialsPoint"
        android:textColor="#fff"
        android:textSize="24sp"
        android:textStyle="bold" />
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Have a nice day!"
        android:textColor="@android:color/background_dark"
        android:textSize="36sp"
        android:textStyle="bold" />
</RelativeLayout>

手順3:スタイル定義(styles.xml)を追加する

res/values/styles.xml に、切り替え用の2つのスタイルを定義します。「boldText」は太字・斜体・白文字、「normalText」は通常スタイル・シルバー文字です。

<resources>
    <style name="boldText">
        <item name="android:textStyle">bold|italic</item>
        <item name="android:textColor">#FFFFFF</item>
    </style>
    <style name="normalText">
        <item name="android:textStyle">normal</item>
        <item name="android:textColor">#C0C0C0</item>
    </style>
</resources>

手順4:カラー定義(colors.xml)を追加する

res/values/colors.xml に、背景色として使用する2つのカラーを定義します。

<resources>
    <color name="highlightedTextViewColor">@android:color/holo_green_light</color>
    <color name="normalTextViewColor">@android:color/holo_red_dark</color>
</resources>

手順5:MainActivity.ktにロジックを実装する

src/MainActivity.kt に以下のコードを記述します。ポイントは setTextAppearance() の呼び出し方です。APIレベル23未満と23以降で引数が異なるため、Build.VERSION.SDK_INT でOSバージョンを判定して処理を分岐させています。

import android.os.Build
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
    lateinit var textView: TextView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"
        textView = findViewById(R.id.textView)
        textView.setOnClickListener {
            if (Build.VERSION.SDK_INT < 23) {
                textView.setTextAppearance(applicationContext, R.style.boldText)
            }
            else {
                textView.setTextAppearance(R.style.boldText)
            }
            textView.setBackgroundResource(R.color.highlightedTextViewColor)
        }
    }
}

実装のポイント

setTextAppearance() を使うことで、XMLで定義したスタイルをコードから適用できます。さらに setBackgroundResource() を組み合わせれば、文字スタイルだけでなく背景色も同時に変更可能です。タップのたびにスタイルを交互に切り替えたい場合は、フラグ変数を持たせて「boldText」と「normalText」をトグルするとより実用的になります。

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

androidManifest.xml は以下のようになっていることを確認してください。特別な権限は不要です。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.q11">
    <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端末をUSB接続していることを前提に説明します。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの実行(Run)アイコンをクリックします。表示された候補から接続中のモバイルデバイスを選択すると、実機の画面にアプリが起動します。

初期状態では中央のTextViewは通常の黒文字で表示されています。TextViewをタップすると、文字が白い太字・斜体に変わり、背景が緑色(holo_green_light)にハイライトされます。これで、実行時におけるTextViewスタイルの動的変更は完了です。

KotlinでAndroidのTextViewスタイルを実行時に動的に変更する方法【初心者向け解説】

KotlinでAndroidのTextViewスタイルを実行時に動的に変更する方法【初心者向け解説】

まとめ

Kotlinでは setTextAppearance()setBackgroundResource() を組み合わせるだけで、TextViewの文字スタイルや背景色を簡単に実行時に変更できます。ダークモード対応やテーマ切り替え機能など、応用範囲が広いテクニックなので、ぜひ自分のプロジェクトでも活用してみてください。

  1. 【Android】実行時にTextViewのスタイルを動的に変更する方法を解説

    このチュートリアルでは、Androidアプリにおいて実行時(ランタイム)にTextViewのスタイルを動的に変更する方法を解説します。画面上のTextViewをタップすると、文字スタイル(太字・斜体)と背景色が切り替わるサンプルを、実際のコードとともに段階的に紹介していきます。 手順1:Android Studioで新規プロジェクトを作成する Android Studioを開き、メニューから「File」→「New Project」を選択します。必要な設定項目をすべて入力して、新しいプロジェクトを作成しましょう。 手順2:activity_main.xml にレイアウトを記述する res/lay

  2. KotlinでAndroidエミュレータのIPアドレスを取得する方法【初心者向け】

    はじめに Kotlinを使えば、Wi-Fi接続情報から簡単にAndroidエミュレータや実機デバイスのIPアドレスを取得できます。この記事では、ボタンをタップすると現在のIPアドレスが画面に表示されるシンプルなサンプルアプリを作成しながら、具体的な手順をわかりやすく解説します。 仕組みとしては、WifiManagerから接続中のネットワーク情報を取得し、Formatter.formatIpAddress()メソッドで整数値として保持されているIPアドレスを「192.168.x.x」のような読みやすい文字列に変換する流れになります。 ステップ1:新規プロジェクトの作成 まずはAndroid St