我是 Android 开发的初学者,我正在尝试编写一个搜索应用程序,该应用程序接受字符串并输出包含该字符串的文本消息。我的问题是尝试格式化第二个屏幕上的文本输出。我使用代码正确显示文本:
TextView textView = new TextView(this);
textView.setTextSize(20);
// Set the text view as the activity layout
setContentView(textView);
..... (find string matches)
textView.append(msg);
但是,当我去编辑该文件的 .xml 文件时,没有任何变化(我尝试添加粗体、添加起始文本等)。我将 TextView xml block 复制到 Activity_main.xml 中,它在第一个屏幕上显示粗体“hello world”,而不是第二个屏幕,即使 TextView 部分是精确的副本也是如此。我在第二个过程中缺少什么而我在第一个过程中正在做的事情?我的问题出在我的 TextView 声明中吗?我的最终目标是显示许多文本消息匹配并强制它们水平适合屏幕并允许用户垂直滚动,更改第二个 xml 文件是否是错误的方法?
谢谢
最佳答案
看来您混合了两种不同的方式来“创建” View :
- 在 xml 中声明它们并扩充它们
- 以编程方式实例化它们
第一种方法是使用 xml 文件(静态)声明布局。 IE。您的布局文件可能名为 activity_layout.xml
并包含以下条目,该条目定义了 ID 为 textview1
的 TextView
。
<TextView android:id="@+id/textview1" ... />
为了在这样的布局定义中使用 View ,您需要“膨胀”它。一个常见的地方是在 Activity
中。但是,您首先需要告诉 Android 从哪个布局进行膨胀:
// inflate from 'activity_layout.xml'
setContentView(R.layout.activity_layout);
// inflate the TextView with id 'textview1'
TextView textview = (TextView) findViewById(R.id.textview1);
现在,第二种方法是在代码中(动态)实例化 View 。这不需要布局文件。通常,您可以将其与膨胀区分开来,因为存在“new”关键字。即
// not xml definition required; all code
TextView textview = new TextView(getActivity());
我希望你明白这是怎么回事?您的代码 fragment 表明您正在使用第二种方法,而您的解释提到您正在修改布局文件以希望看到更改。基本上,您正在更改当前未使用的布局文件,因此您看不到任何事情发生。
要么更改代码以使用布局中的 View ,要么摆脱布局并在代码中完成所有操作。通常第一种方法更灵活且更易于使用;例如您将能够从 Eclipse 中的预览中受益,并且如果布局变得更加复杂,管理也会变得更加容易。
关于java - Xml 布局文件不适用于 Textview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557621/