2017-10-13 5 views
-2

私は外部データベースを持っています。私はBOLDいくつかの特定のテキストにしたい。たとえば、私はワードという名前のカラムを1つ持ち、の例のカラムを持っています。各単語には1つの例があり、各例では単語を使用します。データベースからフェッチするときに特定のテキストをボールドする方法

たとえば、単語は、恐れはです。

例:女の子恐れ入りました彼女は見ました。

データをフェッチして、リサイラビューで表示する場合は、例の中の太字の単語を使用します。

私はそれを達成するために以下のコードを使用しますが、動作しませんし、特定のテキストでは太字にしません。私が知っている

String bolder = holder.title.getText().toString(); 

SpannableStringBuilder stringBuilder = new SpannableStringBuilder(bolder); 
stringBuilder.setSpan(new android.text.style.StyleSpan(Typeface.BOLD), 0, 
       holder.title.getText().toString().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
Log.d("span",holder.title.getText().toString()); 

holder.example.setText(stringBuilder); 
holder.example.setText(wordsList.getExample()); 

のようなhtmlタグで我々は太字ことができますが、私のデータは、より多くのであり、私はSpannableを使用します。

+0

ツあなたを助けることを願っています。 [このサンプルアプリケーション](https://github.com/commonsguy/cw-omnibus/tree/v8.7/RichText/Search)では、SpannableStringBuilderを使用して長い文字列内の単語を強調表示する方法を示しています(ただし、背景色は太字ではなく)。 – CommonsWare

+0

私は単にテキストをHTMLのstleに保存します。: '女の子は恐れている')です。そして、(廃止予定?) 'HTML.frmHtml()'メソッドを使ってそれを表示してください。 –

+0

@CommonsWareの質問は簡単です。私は特定のテキストを大胆にしたい。しかし、私のコードは動作しません。 –

答えて

0

まず、テキストを太字にするコード

holder.example.setText(stringBuilder);

holder.example.setText(wordsList.getExample())次の行に置き換えます。

コードから最後の行を削除します。

太字にしたい単語がある場合は、外部データベースから取得したテキストにその単語の位置を見つける必要があります。したがって、その単語を太字にするにはspannableを使用する必要があります。例えば

String wordToBold= "afraid"; // the word that you want to bold out 

    String textFromDatabase = wordsList.getExample(); 
    SpannableStringBuilder stringBuilder = new SpannableStringBuilder(textFromDatabase); 
    int startPosition= textFromDatabase.indexOf(wordToBold); 
    if(startPosition!=-1){ 
      stringBuilder.setSpan(new android.text.style.StyleSpan(Typeface.BOLD), startPosition, startPosition + wordToBold.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      holder.example.setText(stringBuilder); 
    } 
    else{ 
      holder.example.setText(wordsList.getExample()); 
    } 

手段を「動作しない」何、それは具体的に、あなたの質問を編集して、説明して下さい

+0

返信いただきありがとうございました。私は上記のコードを使用していますが、アプリケーションがクラッシュし、 'java.lang.IndexOutOfBoundsException:setSpan(10 ... 6)が開始前に終了しました 'というエラーがlogcatに出力されました。遅くスクロールすると、大胆な言葉が適用されず、このアプリがクラッシュした後に表示されます。 –

+0

このブロックをtry catchブロックに配置する必要があります。ログにstartPositionを出力し、正しい位置を与えるかどうかを確認してください。 –

+0

なぜtry catch catchを使用することをお勧めしますか?また、私は大胆に恐れて、それを適用しないでください大丈夫です。私はあなたのコードが正しいので、理由を知らない、開始位置が正しいと終了するため。 –

0

これを試してください。

1.使用setTypeface

holder.example.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); 

getPaint 2.use

holder.example.getPaint().setFakeBoldText(true); 

編集

String bolder = holder.title.getText().toString(); 
SpannableStringBuilder stringBuilder = new SpannableStringBuilder(bolder + wordsList.getExample()); 
StyleSpan span = new StyleSpan(Typeface.BOLD); 
stringBuilder.setSpan(span, 0, bolder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
Log.d("span", holder.title.getText().toString()); 
holder.example.setText(stringBuilder); 
+0

私はこの仲間を望んでいない、このコードはすべてのステートメントの太字に適用されます。私は質問の例のような大胆な言葉が欲しい。 –

+0

ありがとうございますが、このコードでは最初に単語、それにexample +というステートメントを作成しています。恐れていた:女性はショウが見たものを恐れていた。 –

+0

私の問題は、太字で始まり太字で終わる時だと思います。 int startとint endを正しく使用する必要がありますか? –

関連する問題