0

我正在尝试在将 TextView 转换为字符串的同时向字符串添加新行 ("\n")。当用户单击“保存名称”按钮时,它会添加一个在 TextView 中生成并显示的名称。然后他可以选择生成另一个名称并再次单击保存。当我稍后显示保存的名称时,我希望它们位于单独的行上,而不是紧挨着彼此。这是我的代码:

/** Called when the user clicks the Save Name button */
public void save_name(View view) {

    String filename = "saved_names.txt";
    TextView inputName = (TextView) findViewById(R.id.tViewName);
    String name = inputName.getText().toString().concat("\n");
    FileOutputStream outputStream;

    try {
      outputStream = openFileOutput(filename, Context.MODE_APPEND);
      outputStream.write(name.getBytes());
      outputStream.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
}

这不起作用,它仍然在同一条线上。该怎么办?

4

3 回答 3

0

我自己找到了答案。上面的代码是正确的:

/** Called when the user clicks the Save Name button */
public void save_name(View view) {

    String filename = "saved_names.txt";
    TextView inputName = (TextView) findViewById(R.id.tViewName);
    String name = inputName.getText().toString().concat("\n");
    FileOutputStream outputStream;

    try {
      outputStream = openFileOutput(filename, Context.MODE_APPEND);
      outputStream.write(name.getBytes());
      outputStream.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
}

但我还需要在从文件中读取的代码上添加“\n”以显示名称:

private String readFromFile() {
    String ret = "";
    try {
        InputStream inputStream = openFileInput("saved_names.txt");

        if ( inputStream != null ) {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String receiveString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ( (receiveString = bufferedReader.readLine()) != null ) {
                stringBuilder.append(receiveString + "\n");
            }

            inputStream.close();
            ret = stringBuilder.toString();
        }
    }
    catch (FileNotFoundException e) {
        Log.e(TAG, "File not found: " + e.toString());
    } catch (IOException e) {
        Log.e(TAG, "Can not read file: " + e.toString());
    }

    return ret;
}

在这条线上:stringBuilder.append(receiveString + "\n");

无论如何,感谢您的帮助!

于 2013-09-07T14:46:51.047 回答
0

您可能想要使用\r\n(回车,换行),而不是仅仅\n将其写入文件并将其读回。

于 2013-09-06T18:09:43.550 回答
0

首先,将您的 TextView 设置为禁用单线模式。默认情况下,TextView 将 singleLine 设置为 true。

<TextView
    android:id="@+id/myTextView"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:singleLine="false" />

其次,您实际上并没有设置 TextView 的内容;您只需获取当前内容并将换行符附加到该 String 对象(而不是 TextView)。

你想要的是:

TextView inputName = (TextView) findViewById(R.id.tViewName);
String name = inputName.getText().toString().concat("\n");
inputName.setText(name);

您可能还需要考虑为您的名称列表使用ListView,因为它们为添加、删除和样式化项目提供了更好的支持

于 2013-09-06T18:12:11.207 回答