質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1686閲覧

SQLiteで取得した改行コードを含むデータがTextViewに設定時に改行されない

Lily_V

総合スコア12

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2022/04/23 12:28

編集2022/04/24 13:10

発生している問題

AndroidStudio、言語はJavaでアプリ作成を行っています。
SQLiteで取得した改行コード(\n)を含むデータをTextViewに設定すると、改行はされているようですが、途切れて一行目しか表示されません。

該当のソースコード

■SqliteOpenHelper.java

java

1db.execSQL("INSERT INTO cdVersionTbl (titleCd, versionCd, special, hasFlg, favoriteFlg) VALUES(17, 2, '1. MV\n2. メイキング映像', 0, 0);");

■Activity

java

1TextView textSpecial = new TextView(getActivity()); 2String text = record.get(CLM_SPECIAL); //デバッグ: text = 1. MV\n2. メイキング映像 3textSpecial.setText(text); 4textSpecial.setTextSize(18); 5textSpecial.setPadding(50, 0, 0, 0); 6textSpecial.setLayoutParams(new LinearLayout.LayoutParams( 7 LinearLayout.LayoutParams.MATCH_PARENT, 8 LinearLayout.LayoutParams.WRAP_CONTENT)); 9 layoutSpecialContents.addView(textSpecial);

■レイアウト

xml

1<LinearLayout 2 android:id="@+id/layout_special_contents" 3 android:layout_width="match_parent" 4 android:layout_height="wrap_content" 5 android:layout_marginBottom="20dp" 6 android:orientation="vertical"> 7 8 <TextView 9 android:layout_width="match_parent" 10 android:layout_height="wrap_content" 11 android:text="@string/lblSpecial" 12 android:textColor="@color/colorPrimary" 13 android:textSize="18sp" />

イメージ説明

試したこと

1. SQLiteから取得する際に改行コードがエスケープされているのかと思い、改行コードを置換してみましたが、変わりありませんでした。

java

1textSpecial.setText(text.replace("\\n", "\n")); 2 3textSpecial.setText(text.replace("\r\n", "\n"));

2. 以下のコードを追加したところ、全文表示されるようにはなりましたが、改行がされません。(「1. MV 2. メイキング映像」)

java

1textSpecial.setInputType(InputType.TYPE_CLASS_TEXT);

3. レイアウトの問題で表示されていないだけかとも思いましたが、以下のコードでは全文表示されます。

java

1TextView textSpecial = new TextView(getActivity()); 2textSpecial.setText("あああ\nいいい\nううう");

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2022/04/23 13:40

SQL (INSERT 文等 ) は全体を文字列として編集するのではなく PreparedStatement を用いて、データのエスケープ等はドライバに任せるようにしてください。
Lily_V

2022/04/24 13:15

ご回答ありがとうございます。 試してみましたが、本件の解決には至りませんでした。 しかし、効率の良いコードについて学べました。ありがとうございます。 質問にレイアウトのコードを追加しましたが、LinearLayoutの高さを固定で大きくすると、改行されていることは確認できました。最悪、高さを固定で指定するしかないのかなと思っています。。
jimbe

2022/04/24 13:46

コードもレイアウトも「部分」だけでは再現実験も出来ません。 そもそも xml のレイアウトがあるのに何故コードで TextView を作っているのでしょうか。 SQL を直接文字列編集しないのは、効率というよりは SQL インジェクションというクラッキングを防ぐ意味が重要です。
Lily_V

2022/04/26 15:34

SQLで取得したレコード数分だけ動的に項目を増やしたくてコードからTextViewを生成していたのですが、該当箇所についてはレコード数が決まっていたのでレイアウト固定で行けそうです。 動的生成が必要なところに引っ張られて、レイアウトにTextViewを用意するという発想が頭から抜け落ちていました。気付きをありがとうございます。解決致しました。 SQLについて補足もありがとうございます。
jimbe

2022/04/26 19:20

> SQLで取得したレコード数分だけ動的に項目を増やしたくて どの様な形にされたいのか分かりませんが、リスト状に並べるのでしたら普通に ListView や RecyclerView を使われた方が良いのではないでしょうか。
guest

回答1

0

自己解決

今回は、要素を動的に生成する必要がない部分でしたので、
TextViewをコードから生成するようにしていた部分を、レイアウトファイルに部品を用意することで解決しました。

投稿2022/04/26 15:36

Lily_V

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問