8

スパンを多用するいくつかのテキストビューを使用しています。

問題:私のアプリ (特に Ice Cream Sandwich) で、テキスト文字列に含まれていない改行と、テキストの重複が表示されることがあります。例については、下の画像を参照してください。3 番目のセンテンスがどのように始まり、次に改行があり、テキストが複製され、センテンスが終了するかに注目してください。

ここに画像の説明を入力

コード:

tv = (TextView) inflater.inflate(R.layout.fragment_reader_list_item, parent, false);
SpannableStringBuilder ssb = ssbList.get(position);
tv.setText(ssb, BufferType.SPANNABLE);

コードをデバッグすると、変数「ssb」にはテキストのみが適切に含まれます...「3 あなたの担当者を横暴にするのではなく、群れの模範となります。4 そして、チーフの場合」...

数時間いじって気づいたいくつかの詳細: バグを引き起こす条件は、レンダリングされたテキストの全体的な幅に関係しているようです。たとえば、上の写真のテキストで、数字の太字スパンをオフにすると、写真のテキストは適切に表示されますが、太字スパンをそのままにして、数字の色変更スパンをオフにすると (幅がまったくない場合)、問題は解決しません。

また、各番号の後に改行なしのスペースを使用していることにも注意してください。非改行スペースを改行スペースと交換すると、問題はもう表示されませんが、レンダリングされた文字列が変更されるため、多かれ少なかれおそらくそうです。この問題はスパンとは何の関係もないかもしれませんが、古いテキストだけを渡すには大きすぎるバグのようです。

どんな助けでも大歓迎です!

編集: このバグは、Bold スパンの使用に強く関連しているようです。数字から外すと問題が解決します。それが私が現在回避策として頼っているものです。もっと良い選択肢があれば良いのですが。

4

1 に答える 1

0

私があなたの問題を理解している限り、別の SpannableStrinBuilder sb を使用し、以下に定義されているように sb にテキストを設定してください。タブと改行を削除しています。

SpannableStringBuilder sb = new SpannableStringBuilder();
for(int loop=0 ; loop<(str.length() -1); loop++)
{
  if(!(str.subSequence(loop, loop+1).equals("\t") || 
       str.subSequence(loop, loop+1).equals("\n"))
    )
  {
  sb.append(str.charAt(loop));
  }
}
于 2013-04-10T11:06:24.273 に答える