260

私はTextView次のようなスタイルでコンストラクターを使用しようとしています:

TextView myText = new TextView(MyActivity.this, null, R.style.my_style);

ただし、これを行うと、テキスト ビューはスタイルを取得していないように見えます (静的オブジェクトに設定してスタイルを確認しました)。

私も使ってみましたが、うまくいきmyText.setTextAppearance(MyActivity.this, R.style.my_style)ません。

4

12 に答える 12

329

プログラムでスタイルを設定できるとは思いません。これを回避するには、スタイルが割り当てられたテンプレート レイアウト xml ファイルを作成します。たとえば、res/layout で、次の内容のように tvtemplate.xml を作成します。

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="This is a template"
        style="@style/my_style" />

次に、これを膨らませて、新しい TextView をインスタンス化します。

TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null);
于 2011-03-30T15:42:55.983 に答える
127

一般的なスタイルを作成して、次のような複数のテキストビューで再利用できます。

textView.setTextAppearance(this, R.style.MyTextStyle);

編集:これはコンテキストを指します

于 2012-10-05T11:19:30.497 に答える
102

次のようにContextThemeWrapperをコンストラクターに渡すことができます。

TextView myText = new TextView(new ContextThemeWrapper(MyActivity.this, R.style.my_style));
于 2013-07-03T07:56:10.460 に答える
17

コンストラクターでスタイルを設定できます (ただし、スタイルを動的に変更/設定することはできません)。

View(Context, AttributeSet, int)(これintは、スタイルへの参照を含む現在のテーマの属性です)

Romain Guy さんからの回答

参照

于 2013-02-19T02:22:55.360 に答える
5

動的に変更するスタイルは (まだ) サポートされていません。XML を使用して、ビューを作成する前にスタイルを設定する必要があります。

于 2011-03-30T15:45:45.177 に答える
3

受け入れられた答えは、私にとって素晴らしい解決策でした。追加する唯一のことは、inflate()方法についてです。

受け入れられた回答では、すべてのandroid:layout_*パラメーターは適用されません。

理由はそれを調整する方法がないためです。原因nullは として渡されましViewGroup parentた。

次のように使用できます。

View view = inflater.inflate(R.layout.view, parent, false);

そして はparentです ,ViewGroupあなたが調整したいところからandroid:layout_*.

この場合、すべての相対プロパティが設定されます。

誰かに役立つことを願っています。

于 2015-04-10T00:40:30.460 に答える
2

スタイルの継承 (またはイベント スタイル可能属性) を使用するカスタム ビューを使用する場合、スタイルを失わないように 2 番目のコンストラクターを変更する必要があります。これは、 setTextAppearence()を使用する必要なく、私にとってはうまくいきました:

public CustomView(Context context, AttributeSet attrs) {
    this(context, attrs, attrs.getStyleAttribute());
}
于 2014-01-10T22:47:04.810 に答える
1

を使用できますTextViewCompact.setTextAppearance(textView, R.style.xyz)

参照用のAndroidドキュメント

于 2019-09-02T09:41:18.143 に答える
0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
    textView.setTextAppearance(R.style.yourStyle)
于 2020-07-17T19:20:40.177 に答える
-1

私は EditText でのみテストしましたが、メソッドを使用できます

public void setBackgroundResource (int resid)

XML ファイルで定義されたスタイルを適用します。

このメソッドは View に属しているため、どの UI 要素でも機能すると思います。

よろしく。

于 2012-07-11T15:41:52.193 に答える