2016-12-06 15 views
1

私はアンドロイドのテキストで弾丸を見せたかったのです。私はそれらを正常に追加しました。 インターネットで検索し、弾丸を追加できることがわかりました。テキストが1行以上になると、html listのように適切なスペースに従わなくなります。Androidで適切な書式で箇条書きを追加

下記のスクリーンショットを参照してください。

enter image description here

私は箇条書きを追加するには、次のコードを使用しています。

String longDescription = "Enhanced bass performance.\n" + 
       "Lightweight headband enhances comfort and adds durability\n" + 
       "Easy to adjust headband ensures optimum fit and comfort\n" + 
       "2 metre-long cable"; 

     String arr[] = longDescription.split("\n"); 
     StringBuilder desc = new StringBuilder(); 
     for (String s : arr){ 
      desc.append("<li>"+s+"</li>"); 
     } 
     String newDesc = "<ul>"+desc+"</ul>"; 

     tvProdDesc.setText(Html.fromHtml(newDesc, null, new UlTagHandler())); 

は、ここに私の

UlTagHandler.java

public class UlTagHandler implements Html.TagHandler { 

    public void handleTag(boolean opening, String tag, Editable output, 
          XMLReader xmlReader) { 
     if(tag.equals("ul") && !opening) output.append("\n"); 
     if(tag.equals("li") && opening) output.append("\n•\t"); 
    } 
} 

あるしかし、私はワードプロセッサが行うようテキストが正しくフォーマットされなければならない欲しいです。

私は出力

enter image description here

のこのタイプは、我々は上記の画像にsimillar何かを行うことができますしたいですか?

+0

いいえ、それは私が弾丸を追加した参照の複製されていません。私はよくフォーマットされたテキストが欲しかった。 –

+0

あなたはどのminSdkを提供しますか? – deadfish

+0

minSdkVersion 16とtargetSdkVersion 23 –

答えて

4

この例では満足できますか?

public class MainActivity extends AppCompatActivity { 

    private TextView tvProdDesc; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     tvProdDesc = (TextView) findViewById(R.id.text1); 

     String longDescription = "Enhanced bass performance.\n" + 
       "Lightweight headband enhances comfort and adds durability\n" + 
       "Easy to adjust headband ensures optimum fit and comfort\n" + 
       "2 metre-long cable"; 

     String arr[] = longDescription.split("\n"); 

     int bulletGap = (int) dp(10); 

     SpannableStringBuilder ssb = new SpannableStringBuilder(); 
     for (int i = 0; i < arr.length; i++) { 
      String line = arr[i]; 
      SpannableString ss = new SpannableString(line); 
      ss.setSpan(new BulletSpan(bulletGap), 0, line.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
      ssb.append(ss); 

      //avoid last "\n" 
      if(i+1<arr.length) 
       ssb.append("\n"); 

     } 

     tvProdDesc.setText(ssb); 
    } 

    private float dp(int dp) { 
     return getResources().getDisplayMetrics().density * dp; 
    } 
} 

結果:

enter image description here

関連する問題