実行時にTextViewのスタイルを変更する方法


98

ユーザーがをタップしたときにTextView定義済みのスタイルを適用したいAndroidアプリがあります。

見つけようと思ったのですtextview.setStyle()が存在しません。私は試した

textview.setTextAppearance();

しかし、それは機能しません。


1
これが不可能なことをどこかで読んだことがあります... stackoverflow.com/questions/2016249/…。ただし、一部のプロパティを個別に設定できます。
Floern、2011年

1
試しましたか:textView.setTextTypeface?developer.android.com/reference/android/widget/...
ジョナサン・ロス

21
@Falmarri TextView APIドキュメントを調べましたか?もしそうなら、多分あなたはより建設的な何かを言うことができます。
Fletch、2012年

回答:


143

これを行うにはres/values/style.xml、次のように新しいXMLファイルを作成します。

<?xml version="1.0" encoding="utf-8"?>
<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>

「strings.xml」ファイルにも次のようなエントリがあります。

<color name="highlightedTextViewColor">#000088</color>
<color name="normalTextViewColor">#000044</color>

次に、私のコードで、そのTextViewのタップイベントをトラップするClickListenerを作成しました。 編集: API 23以降、「setTextAppearance」は廃止

    myTextView.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view){
                    //highlight the TextView
                    //myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
    if (Build.VERSION.SDK_INT < 23) {
       myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
    } else {
       myTextView.setTextAppearance(R.style.boldText);
    }
     myTextView.setBackgroundResource(R.color.highlightedTextViewColor);
                }
            });

元に戻すには、次のようにします。

if (Build.VERSION.SDK_INT < 23) {
    myTextView.setTextAppearance(getApplicationContext(), R.style.normalText);
} else{
   myTextView.setTextAppearance(R.style.normalText);
}
myTextView.setBackgroundResource(R.color.normalTextViewColor);

2
実際、これはシャドウスタイルでは機能しません。シャドウを変更する場合は、次のように行う必要があります。lockText.setShadowLayer(20、4、4、0xFFFF0000);
Lukas

3
SDKチェックを回避するには、TextViewCompat.setTextAppearance(myTextView、R.style.myStyle);を使用できます。
Justin Fiedler

90

ジョナサンが提案したように、textView.setTextTypeface作品を使用して、私は数秒前にアプリでそれを使用しました。

textView.setTypeface(null, Typeface.BOLD); // Typeface.NORMAL, Typeface.ITALIC etc.

9
textView.setTypeface(null、Typeface.BOLD);を使用できます。textView..setTypeface(null、Typeface.ITALIC); textView.setTypeface(null、Typeface.BOLD_ITALIC);
peceps

2
textView.setTypeface(null、Typeface.BOLD)が私にとってうまくいきました。もちろん、代わりに1を使用することもできますが、定数を手動で入力することはお勧めしません。ライブラリで事前定義された変数を使用することをお勧めします。
Pijusn 2012

4
定数の代わりにintを使用するように人々を奨励しないでください
Chris.Jenkins

3
いいね!私の間違いは、古い書体を最初のパラメーターで送信していたことでした。したがって、NORMAL-> BOLDを変更してもBOLD-> NORMALを変更しないと機能しません。最初のパラメータがnullになる可能性があることを知りませんでした!今では私にとってはうまくいきます!
フェリペ

12
TextView tvCompany = (TextView)findViewById(R.layout.tvCompany);
tvCompany.setTypeface(null,Typeface.BOLD);

あなたはコードからそれを設定します。書体


4

プログラム的に:実行時

setTypeface()を使用してプログラムで行うことができます。

textView.setTypeface(null, Typeface.NORMAL);      // for Normal Text
textView.setTypeface(null, Typeface.BOLD);        // for Bold only
textView.setTypeface(null, Typeface.ITALIC);      // for Italic
textView.setTypeface(null, Typeface.BOLD_ITALIC); // for Bold and Italic

XML:デザインタイム

XMLでも設定できます。

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"

これが役に立てば幸い

まとめた


2

textView.setTypeface(Typeface.DEFAULT_BOLD);は最も簡単な方法であることがわかりました。


これにより、書体が変更されます。OPで指定されているスタイルではありません
HBG

確かに、これは投稿時の最も簡単な方法であり、私が覚えている唯一の方法です。その間に、書体を変更せずに「スタイル」をボールドに変更できる新しいAPIメソッドが追加されたかどうかはわかりません。私が間違っていたら訂正してください。
sfera 2017年

1

このコード行を試してください。

textview.setTypeface(textview.getTypeface(), Typeface.DEFAULT_BOLD);

ここでは、このテキストビューから現在の書体を取得し、新しい書体を使用して置き換えます。ここに新しい書体DEFAULT_BOLDがありますが、もっと多くを適用できます。


なぜあなたのコードがなぜ彼の問題を解決するのかを説明したいのです、ありがとう。
Muhammed Refaat 2016年

OP 、書体ではなくスタイルを変更する必要があります。
HBG

0

TextView http://developer.android.com/reference/android/widget/TextView.htmlの setText()のdocoを参照してください

文字列のスタイルを設定するには、android.text.style。*オブジェクトをSpannableStringにアタッチするか、XMLリソースファイルでフォーマットされたテキストを設定する例について、利用可能なリソースタイプのドキュメントをご覧ください。


0

設定するスタイルに応じて、さまざまな方法を使用する必要があります。TextAppearanceのものには独自のセッター、TypeFaceには独自のセッター、背景には独自のセッターなどがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.