トップMy OpenStreetMap > テキストを複数行で描画する

テキストを複数行で描画する

はじめに

地図アプリGISでは下図の例から分かるように、テキストは、4文字までは1行、4文字を超えるときは、 複数行に分けて表示している。

GISでは、まず、文字列を複数行に分割しておき、行ごとに Canvas#drawText メソッドで描画している。 全体としては結構プログラム行数がかかっている[1]

複数行に分けるのが面倒である。日本語だけで単純に4文字であれば簡単であるが、 '「' を末尾に置かないといった各種の禁則処理がある。 また、英字の場合、単語の途中では改行しないといった処理もいる。 プログラムはこちらの方に行数が嵩む。

できれば、縁取り文字にも対応する。

次期地図アプリMapでは、別の方法を試してみる。 TextView に折れ曲がり(複数行)表示して、その結果を Bitmap で取り込む。

TextViewを画面に貼り付けずにこれを行う方法が記事[2]にあるが、表示されなければ、 画面にレイアウトされていても問題はない。

TextViewに複数行表示

つぎのようにすれば、スマホ画面には4文字3行で表示された。

  <TextView
      android:id="@+id/multiline_text"
      android:layout_height="wrap_content"
      android:layout_width="100dp"
      android:text="いろはにほへとちりぬるを" />

文字列を "いろは abc に ef ほへとちりぬるを」わか" としてみると、

いろは
abc に ef
ほへとち
りぬる
を」わか
となった。英字や禁則処理もまずまずの出来栄えと言える。

Bitmap として取り込めればベストであるが、それが難しくても 複数行に分割された文字列が得られればありがたい。

リファレンス

[1] Android Java: 文字列の描画
[2] 画面に配置せずにViewからBitmapを生成する
[3] Create a multiline TextView in Android application
[4] draw Multi Line Text on Canvas - Android java.lang
[5] get Multi Line Text Bounds - Android java.lang