メニューページの見出しとして使用するTextViewがあります。
<TextView
Android:id="@+id/menuTextView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Menu"
Android:textColor="@color/white"
Android:textSize="25sp"
Android:textStyle="bold" />
今度は、アプリのすべてのサブメニューに同じ色、サイズ、スタイルのTextViewが必要です。 TextView全体をすべてのレイアウトにコピーして貼り付け、それぞれのテキストを変更する代わりに、TextViewで1つのレイアウトを作成し、それをすべてのサブメニュービューに含めて、テキストのみをオーバーライドすると思いました。
私のコードは次のようになります:
/layout/menutextview.xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/menuTextView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/default"
Android:textColor="@color/white"
Android:textSize="25sp"
Android:textStyle="bold" />
各レイアウトのインクルードxmlファイルは、テキスト属性をオーバーライドしようとします。
<include layout="@layout/menutextview" Android:text="@string/menu" />
<include layout="@layout/menutextview" Android:text="@string/settings" />
ただし、デフォルトのテキストはどこにでも表示されます。誰かが問題が何であるかについての考えを持っていますか?
よろしく、マティアス
StackOverflowへようこそ;)
Includeを使用して、子のプロパティを「オーバーライド」することはできません。どのタイプのレイアウトを含めるかはわかりません。膨らませて現在のレイアウトに追加するだけです。
テキストを動的に変更するには、コードで変更する必要があります。
final TextView textView1 = (TextView) findViewById(R.id.menuTextView);
textView1.setText(R.string.menu);
final TextView textView2 = (TextView) findViewById(R.id.settingsTextView);
textView2.setText(R.string.settings);
スタイルを使用して、TextViewにそのスタイルを実装してもらいます。これにより、ビューの一貫性を維持しやすくなります。
これは DataBinding で実現できます。まず、子レイアウトで変数を定義します。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
xmlns:Android="http://schemas.Android.com/apk/res/Android">
<data>
<variable
name="buttonText"
type="String" />
</data>
<Android.support.v7.widget.AppCompatTextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@{buttonText}"/>
</layout>
次に、それを含める他のレイアウトファイルに設定します。
<!-- .... other views -->
<include
layout="@layout/inc_icon_button"
bind:buttonText="@{`Put your String here`}" />
<!-- .... other views -->
最良の場合は、親レイアウトに変数を設定して、バインディングを転送するだけです。
次の解決策を使用できます。
View section;
_および_TextView textview;
_section = findViewById(R.id.section);
View.findViewById();
でバインドしますtextview = section.findViewById(R.id.textview);
this 側からの情報を使用しました。