プログラムで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" />
textview.setTypeface(Typeface.DEFAULT_BOLD);
setTypefaceは属性textStyleです。
Shankar Vが追加されたので、以前に設定した書体属性を保持するために、次のものを使用できます。
textview.setTypeface(textview.getTypeface(), Typeface.BOLD);
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" />
あなたはいつでもそれをあなたのやり方で持つことができます!
それが役に立てば幸い!
setTextAppearance
またはsetTextTypeface
を検索してください。スタックオーバーフローについても同様の問題があります。 実行時にTextViewのスタイルを変更する方法
このタスクを達成するための方法はいくつかあります。
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"
この質問は多くの場所でさまざまな方法で行われます。私はもともとここでそれに答えましたが、私はそれがこのスレッドにも関連していると感じます(私が答えを探していたとき---私は結局 here になったので)。
この問題に対する1行の解決策はありませんが、これは私のユースケースではうまくいきました。問題は、 'View(context、attrs、defStyle)'コンストラクタが実際のスタイルを参照しておらず、属性が必要なことです。だから、私たちはなります:
「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だけでなく、どのカスタムビューでも機能するはずです。
Kotlin Version
テキストスタイルに加えて現在のフォントを保持するには:
textView.apply {
setTypeface(typeface, Typeface.NORMAL)
// or
setTypeface(typeface, Typeface.BOLD)
// or
setTypeface(typeface, Typeface.ITALIC)
// or
setTypeface(typeface, Typeface.BOLD_ITALIC)
}
これは私のために働きました
textview.setTypeface(textview.getTypeface(), Typeface.BOLD);
または
textview.setTypeface(Typeface.DEFAULT_BOLD);
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));
よろしく。