あなたが次のようなことをしたら
myTextView.setText("This is on first line \n This is on second line");
その後、次のように正しく表示されます。
これは最初の行です
これは2行目です
その文字列をデータベースに保存し、それを表示するビューに設定すると、次のようになります。
これは最初の行にあります\ nこれは2行目にあります
以下は、データベースから文字列を抽出するために使用するコード行です。
factView.setText(factsCursor.getString(MyDBAdapter.FACT_COLUMN));
各行がテーブルの新しいエントリであるテキストファイルからデータベースにデータを入力するだけなので、行は「これは最初の行にあります\ nこれは2行目にあります」のようになり、テキストとして保存されます。
\ n文字が適切に表示されない理由はありますか?これは、データベース内の文字列と関係があるはずです。助言がありますか?
Falmarriが彼のコメントで述べたように、あなたの文字列はデータベースに入れられるときにエスケープされています。文字列をTextView
に配置する前にString s = unescape(stringFromDatabase)
を呼び出すことで、文字列のエスケープを解除できます。
補足として、データベースにデータを挿入するときは、ユーザーからのあらゆる種類のデータまたは不明な変更可能なソースでDatabaseUtils.sqlEscapeString()
を使用していることを確認してください。これにより、エラーと SQLインジェクション から保護されます。
私はこの質問を見つけましたオースティン・マホニーの答えは正しいですが、ここに少し助けがあります:
private String unescape(String description) {
return description.replaceAll("\\\\n", "\\\n");
}
description
はSQLite DBから出力される文字列です
\\n
ではなく\n
をお試しください。例外がスローされる場合は、\ nの代わりに改行キーワードを使用します。..改行は1文字で、ASCII 10です。多くの場合、文字列リテラルで入力されます...そしてあなたの目的に役立ちます......)
"This is on first line"||x'0A'||"This is on second line"
||
は文字列を連結し、x'0A'
はエスケープされていない改行です。
レコードを挿入する場合は、すべての改行を"||x'0A'||"
で置き換える必要があります(文字列が二重引用符で囲まれている場合)。これは、他の回答者に比べて不格好に見えるかもしれません。ただし、行が別々の列にある場合、これは選択でも機能します。
SELECT firstline||x'0A'||secondline FROM wherever;
あなたが同じ問題を抱えているときにこれを見つけました: http://www.mail-archive.com/[email protected]/msg43557.html
テキスト領域は複数行または単一行モードにすることができます。単一行モードの場合、改行文字「\ n」はスペースとして扱われます。疑わしい場合は、マルチラインモードを切り替えるには、次のコードを使用できます。
setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
同じコードがハニカムとフローズン(デフォルトが異なるように見える)では機能しないという問題がありました。フィールドを強制的に単一行にしたい場合も、フラグを除外しています。
Android docから:
public static final int TYPE_TEXT_FLAG_MULTI_LINE APIレベル3で追加されました
TYPE_CLASS_TEXTのフラグ:複数行のテキストをフィールドに入力できます。このフラグが設定されていない場合、テキストフィールドは1行に制限されます。定数値:131072(0x00020000)
http://developer.Android.com/reference/Android/text/InputType.html#TYPE_TEXT_FLAG_MULTI_LINE
フィールドに入力する前にフラグを設定する必要があります。