Android-TextView TextStyleをプログラムで設定しますか?


232

プログラムでtextStyle属性を設定する方法はありTextViewますか?setTextStyle()メソッドがないようです。

明確にするために、私はビュー/ウィジェットのスタイルについて話しているのではありません!私は以下について話している:

<TextView
  android:id="@+id/my_text"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="Hello World"
  android:textStyle="bold" />

1
以下のリンクを参照して、トップ1の回答をロックできます。stackoverflow.com
questions/6200533/

私の答えをここで確認してください。これがあなたの役に立つことを
願っ

回答:


410
textview.setTypeface(Typeface.DEFAULT_BOLD);

setTypefaceは属性textStyleです。

以下のようシャンカールVは、あらかじめ設定された書体を維持するために、追加使用できる属性:

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

14
それがあるべきtextview.setTypeface(textview.getTypeface(), Typeface.DEFAULT_BOLD);
SankarのV

2
@IlyaEreminを使用して、以前に設定したフォントを保持するには、このように使用する必要があります。
Sankar V

@SankarVコメントに基づいて私の回答を編集しました。
Raz

13
私はあなたがデフォルトを失うべきだと思います:holder.title.setTypeface(holder.title.getTypeface()、Typeface.BOLD);
Iman Akbari 2016

実はtextview.getTypeface().getStyle()android:textStyle
ピエール

126

values / styles.xmlにRedHUGETextというスタイルがあるとします。

<style name="RedHUGEText" parent="@android:style/Widget.TextView">
    <item name="android:textSize">@dimen/text_size_huge</item>
    <item name="android:textColor">@color/red</item>
    <item name="android:textStyle">bold</item>
</style>

通常どおり、XMLレイアウト/your_layout.xmlファイルにTextViewを作成します。

<TextView android:id="@+id/text_view_title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content 
    android:text="FOO" />

そしてあなたの活動のJavaコードであなたはこれをします:

TextView textViewTitle = (TextView) findViewById(R.id.text_view_title);
textViewTitle.setTextAppearance(this, R.style.RedHUGEText);

それは私のために働いた!色、サイズ、重力などを適用しました。AndroidAPIレベルが8から17の携帯電話やタブレットで問題なく使用しました。Android 23以降、このメソッドは廃止されました。コンテキスト引数は削除されているため、最後の行は次のようにする必要があります。

textViewTitle.setTextAppearance(R.style.RedHUGEText);

覚えておいてください...これは、テキストのスタイルが実際にJavaロジックの条件に依存している場合、またはコードを使用してUIを「オンザフライ」で構築している場合にのみ役立ちます...そうでない場合は、行う:

<TextView android:id="@+id/text_view_title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content 
    android:text="FOO" 
    style="@style/RedHUGEText" />

あなたはいつでもあなたのやり方でそれを持つことができます!


4
これは、<style>タグで定義できる属性のサブセットのみを設定します。一般的なもの(サイズ、色、スタイル)を実行しますが、他のもの(パディング、背景、重力などを含む)は適用しません
karl

5
最小API 23が必要と思われますか?
ウィリアムT.マラード2017年

4
2つのメソッドがあり、1つはAPI <23用で、もう1つはAPI 23+用です。<23の場合はコンテキスト引数を取り、23 +の場合は取りませんが、それらは同じように見えます。内部的には、api 23+の場合は<23の場合にメソッドを呼び出し、textviewのメンバーコンテキストを使用します。
MrPlow 2017年


52

このタスクを達成するための多くの方法がいくつかあります:-

1。

String text_view_str = "<b>Bolded text</b>, <i>italic text</i>, even <u>underlined</u>!";
TextView tv = (TextView)findViewById(R.id.ur_text_view_id);
tv.setText(Html.fromHtml(text_view_str));

2。

tv.setTypeface(null, Typeface.BOLD);
tv.setTypeface(null, Typeface.ITALIC);
tv.setTypeface(null, Typeface.BOLD_ITALIC);
tv.setTypeface(null, Typeface.NORMAL);

3。

SpannableString spannablecontent=new SpannableString(o.content.toString());
spannablecontent.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 
                         0,spannablecontent.length(), 0);
// set Text here
tt.setText(spannablecontent);

4。

<?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>

 tv.setTextAppearance(getApplicationContext(), R.style.boldText);

またはあなたがxmlを通して欲しいなら

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

setTextAppearance()は、XMLで定義されたカスタムスタイルを適用するために私が求めていた答えです。ありがとう。
アシャリオ2018

私の意見では、これがスレッドに対する最良の答えです。プログラムでコードを呼び出すための多くのオプション
Nguyen Minh Hien

9

Kotlin Version

テキストスタイルに加えて現在のフォントを保持するには:

textView.apply {
    setTypeface(typeface, Typeface.NORMAL)
    // or
    setTypeface(typeface, Typeface.BOLD)
    // or
    setTypeface(typeface, Typeface.ITALIC)
    // or
    setTypeface(typeface, Typeface.BOLD_ITALIC)
}

7

この質問は多くの場所でさまざまな方法で行われます。私はもともとここで答えましたが、このスレッドにも関連があると感じています(答えを探していたときにここにたどり着いたためです)。

この問題に対する1行の解決策はありませんが、これは私の使用例ではうまくいきました。問題は、 'View(context、attrs、defStyle)'コンストラクターが実際のスタイルを参照せず、属性を必要とすることです。だから、私たちは:

  1. 属性を定義する
  2. 使いたいスタイルを作る
  3. テーマにその属性のスタイルを適用します
  4. その属性でビューの新しいインスタンスを作成します

'res / values / attrs.xml'で、新しい属性を定義します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="customTextViewStyle" format="reference"/>
    ...
</resources>    

res / values / styles.xml 'で、カスタムTextViewで使用するスタイルを作成します

<style name="CustomTextView">
    <item name="android:textSize">18sp</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:paddingLeft">14dp</item>
</style>

「res / values / themes.xml」または「res / values / styles.xml」で、アプリケーション/アクティビティのテーマを変更し、次のスタイルを追加します。

<resources>
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <item name="@attr/customTextViewStyle">@style/CustomTextView</item>
    </style>
    ... 
</resources>

最後に、カスタムTextViewで、コンストラクターを属性と共に使用すると、スタイルを受け取ります。

public class CustomTextView extends TextView {

    public CustomTextView(Context context) {
       super(context, null, R.attr.customTextView);
    }
}

さまざまなバリエーションや場所でcustomTextViewを繰り返し使用したことは注目に値しますが、ビューの名前がスタイルや属性などと一致する必要はまったくありません。また、この手法は、TextViewsだけでなく、あらゆるカスタムビューで機能するはずです。


5

これは私のために働いた

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

または

textview.setTypeface(Typeface.DEFAULT_BOLD);

2

私は2つの簡単な方法でそれを解決しました。

説明に従ってください。

私の既存のスタイル宣言:

<style name="SearchInfoText">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">24sp</item>
    <item name="android:textColor">@color/Church_Grey</item>
    <item name="android:shadowColor">@color/Shadow_Church</item>
    <item name="android:shadowRadius">3</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
</style>

私のAndroid Javaコード:

    TextView locationName = new TextView(getSupportActivity());
    locationName.setId(IdGenerator.generateViewId());
    locationName.setText(location.getName());
    locationName.setLayoutParams(super.centerHorizontal());
    locationName.setTextSize(24f);
    locationName.setPadding(0, 0, 0, 15);
    locationName.setTextColor(getResources().getColor(R.color.Church_Grey));
    locationName.setShadowLayer(3, 1, 1,  getResources().getColor(R.color.Shadow_Church));

よろしく。


0

あなたはこれを試すことができます

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                textView.setTextAppearance(R.style.Lato_Bold);
            } else {
                textView.setTextAppearance(getActivity(), R.style.Lato_Bold);
            }

0

setTextAppearance(resId)はAPI 23 以降でのみ使用できるため、次を使用します。

TextViewCompat.setTextAppearance(textViewGoesHere, resId)

このメソッドは、次のように内部的に実装されています。

public static void setTextAppearance(@NonNull TextView textView, @StyleRes int resId) {
    if (Build.VERSION.SDK_INT >= 23) {
        textView.setTextAppearance(resId);
    } else {
        textView.setTextAppearance(textView.getContext(), resId);
    }
}

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