web-dev-qa-db-ja.com

TextViewを含め、テキストをオーバーライドします

メニューページの見出しとして使用する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" />

ただし、デフォルトのテキストはどこにでも表示されます。誰かが問題が何であるかについての考えを持っていますか?

よろしく、マティアス

33
Mattias

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

スタイルを使用して、TextViewにそのスタイルを実装してもらいます。これにより、ビューの一貫性を維持しやすくなります。

14
JoxTraex

これは 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 -->

最良の場合は、親レイアウトに変数を設定して、バインディングを転送するだけです。

4
Spipau

次の解決策を使用できます。

  1. インクルードレイアウトのインクルードタグとTextViewに特定のID(「セクション」など)を指定します
  2. コードでincludeタグをビューおよびTextViewとして宣言します_View section;_および_TextView textview;_
  3. インクルードのIDでビューをバインドしますsection = findViewById(R.id.section);
  4. インクルードのTextViewをView.findViewById();でバインドします

textview = section.findViewById(R.id.textview);

this 側からの情報を使用しました。

0
user8136984