Mat*_*ias 32 android overriding include 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" />
Run Code Online (Sandbox Code Playgroud)
现在我需要在我的应用程序的每个子菜单上使用相同颜色,大小和样式的TextView.而不是将整个TextView复制粘贴到每个布局,只更改每个布局中的文本,我想我会使用TextView制作一个布局并将其包含在每个子菜单视图中,只覆盖文本.
我的代码看起来像这样:
/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" />
Run Code Online (Sandbox Code Playgroud)
每个布局中的包含xml文件尝试覆盖text属性:
<include layout="@layout/menutextview" android:text="@string/menu" />
<include layout="@layout/menutextview" android:text="@string/settings" />
Run Code Online (Sandbox Code Playgroud)
但是默认文本随处可见.任何人都有问题可能是什么?
问候,马蒂亚斯
Gui*_*ume 19
欢迎来到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);
Run Code Online (Sandbox Code Playgroud)
您可以使用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>
Run Code Online (Sandbox Code Playgroud)
然后在包含它的其他布局文件中设置它:
<!-- .... other views -->
<include
layout="@layout/inc_icon_button"
bind:buttonText="@{`Put your String here`}" />
<!-- .... other views -->
Run Code Online (Sandbox Code Playgroud)
最好的情况是,您的父布局中也会有一个变量,然后只转发绑定。