0

我是 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 块复制到我的 activity_main.xml 中,它在第一个屏幕上显示了一个粗体的“hello world”,而不是在第二个屏幕上,即使 TextView 部分是一个精确的副本。我在第一个做的第二个中缺少什么?我的 TextView 声明中有问题吗?我的最终目标是显示许多文本消息匹配项并强制它们水平适应屏幕并允许用户垂直滚动,更改第二个 xml 文件是错误的方法吗?

谢谢

4

2 回答 2

1

看来您正在混合“创建”视图的两种不同方式:

  1. 在 xml 中声明它们并膨胀它们
  2. 以编程方式实例化它们

第一种方法是使用 xml 文件(静态)声明布局。即,您的布局文件可能被命名activity_layout.xml并包含以下定义TextView带有 id的条目textview1

<TextView android:id="@+id/textview1" ... />

为了在这样的布局定义中使用视图,您需要“膨胀”它。一个常见的地方是在一个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);

现在,第二种方法是(动态地)在代码中实例化视图。这不需要布局文件。通常,您可以将其与膨胀区分开来,因为存在“新”关键字。IE

// not xml definition required; all code
TextView textview = new TextView(getActivity());

我希望你看到这是怎么回事?您的代码片段建议您使用第二种方法,而您的解释提到您正在修改布局文件以希望看到更改。基本上,您正在更改当前未使用的布局文件,因此您看不到任何事情发生。

要么更改代码以使用布局中的视图,要么摆脱布局并在代码中执行所有操作。通常第一种方法更灵活,更易于使用;例如,您将能够从 Eclipse 中的预览中受益,并且如果布局变得更复杂,管理起来会容易得多。

于 2012-11-26T02:36:33.867 回答
0

你的问题是这样的:

   // Set the text view as the activity layout
      setContentView(textView);

如果你像这样设置 setContentView ,无论你如何更改你的 xml 文件,你仍然会得到同样的东西。大小为 20 的文本。
尝试创建一个新布局并在其上添加 Textview。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >


        <TextView
            android:id="@+id/TextView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

    </LinearLayout> 

更改您的代码如下:

setContentView(R.layout.new_layout);
TextView textView = (TextView)findViewById(R.id.TextView1);
..... (find string matches)

      textView.append(msg);
于 2012-11-26T02:37:21.883 回答