web-dev-qa-db-ja.com

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

プログラムでtextStyleTextView属性を設定する方法はありますか? setTextStyle()メソッドはありません。

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

<TextView
  Android:id="@+id/my_text"
  Android:layout_width="fill_parent"
  Android:layout_height="wrap_content"
  Android:text="Hello World"
  Android:textStyle="bold" />
195
Jake Wilson
textview.setTypeface(Typeface.DEFAULT_BOLD);

setTypefaceは属性textStyleです。

Shankar Vが追加されたので、以前に設定した書体属性を保持するために、次のものを使用できます。

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

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>

TextViewをいつものようにXMLのlayout/your_layout.xmlファイルに作成してください。

<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);

それは私のために働いた!そしてそれは色、サイズ、重力などを適用しました。私は問題なく8から17までのAndroid APIレベルで携帯電話やタブレットにそれを使用しました。

覚えておいてください...これは、テキストのスタイルが本当に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" />

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

それが役に立てば幸い!

109
Oscar S.

setTextAppearanceまたはsetTextTypefaceを検索してください。スタックオーバーフローについても同様の問題があります。 実行時にTextViewのスタイルを変更する方法

59
peter.bartos

このタスクを達成するための方法はいくつかあります。

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);

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"
46
duggu

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

この問題に対する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をさまざまなバリエーションやさまざまな場所で繰り返し使用していますが、ビューの名前がスタイルや属性などと一致している必要はまったくありません。また、この方法はTextViewだけでなく、どのカスタムビューでも機能するはずです。

7
Kevin Grant

Kotlin Version

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

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

これは私のために働きました

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

または

textview.setTypeface(Typeface.DEFAULT_BOLD);
4
Ray Hunter

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));

よろしく。

2
andresmafra