我有一个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制作一个布局并将其包含在每个子菜单视图中,只覆盖文本。
我的代码如下所示:
/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" />
但是默认文本随处可见。任何人都有问题可能是什么?
此致 的Mattias
答案 0 :(得分:19)
欢迎使用StackOverflow;)
包含不能用于“覆盖”子属性。它不知道您将包含哪种类型的布局,它只会对其进行充气并将其添加到当前布局中。
要动态更改文本,您需要在代码中执行此操作。
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);
答案 1 :(得分:14)
尝试使用样式并让TextView实现该样式。这样可以更轻松地保持视图的一致性。
答案 2 :(得分:3)
您可以使用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 -->
最好的情况是,您在父版式中还会有一个变量,然后只需转发绑定即可。
答案 3 :(得分:0)
您可以使用以下解决方案:
View section;
和TextView textview;
中将include标记声明为视图和TextView section = findViewById(R.id.section);
的ID绑定视图View.findViewById();
绑定包含的TextView textview = section.findViewById(R.id.textview);
我使用了this端的信息。