2010-04-28 7 views
66

Я разрабатываю приложение, в котором будет поисковый экран , где пользователь может искать конкретные ключевые слова, а это ключевое слово должно быть . Я нашел метод Html.fromHtml.Выделение текста с помощью Html.fromHtml() в Android?

Но я хотел бы узнать, не подходит ли его правильный способ или нет .

Пожалуйста, дайте мне знать ваши мнения по этому вопросу.

+0

выписка для рабочего примера. http://javatechig.com/2013/04/07/how-to-display-html-in-android-view/ –

+0

Возможный дубликат [Возможно ли иметь несколько стилей внутри TextView?] (http: // stackoverflow.com/questions/1529068/is-it-possible-to-have-multiple-styles-inside-a-textview) – blahdiblah

ответ

160

Или гораздо проще, чем иметь дело с Spannable s вручную, так как вы не сказали, что вы хотите, чтобы фон подсвечивается, только текст:

String styledText = "This is <font color='red'>simple</font>."; 
textView.setText(Html.fromHtml(styledText), TextView.BufferType.SPANNABLE); 
+4

Стоит отметить, что Html.fromHtml медленнее SpannableString, потому что он включает в себя синтаксический анализ. Но для короткого текста это не имеет значения. –

+0

. Появляется другое решение в [link] (http://stackoverflow.com/questions/1529068/is-it-possible-to-have-multiple-styles-inside- а-TextView). См. Ответ по легенде. –

+1

Как комментарий, я обнаружил, что мне не нужно передавать TextView.BufferType.SPANNABLE, и он все еще работал. Благодаря! – James

12

Это может быть достигнуто с помощью Spannable String. Вам нужно будет импортировать следующие

import android.text.SpannableString; 
import android.text.style.BackgroundColorSpan; 
import android.text.style.StyleSpan; 

И тогда вы можете изменить фон текста, используя что-то вроде следующего:

TextView text = (TextView) findViewById(R.id.text_login); 
text.setText(""); 
text.append("Add all your funky text in here"); 
Spannable sText = (Spannable) text.getText(); 
sText.setSpan(new BackgroundColorSpan(Color.RED), 1, 4, 0); 

Где это будет выделить charecters в позиции 1 - 4 с красный цвет. Надеюсь это поможет!

+0

Большое спасибо за ответ. – sunil

+0

К сожалению, это не сработало для меня. –

3

Альтернативное решение: вместо этого используется WebView. С Html легко работать.

WebView webview = new WebView(this); 

String summary = "<html><body>Sorry, <span style=\"background: red;\">Madonna</span> gave no results</body></html>"; 

webview.loadData(summary, "text/html", "utf-8"); 
+0

Большое спасибо за ответ и дайте мне знать использование Webview и HTML. – sunil

28

Используя значение цвета из XML-ресурса:

int labelColor = getResources().getColor(R.color.label_color); 
String сolorString = String.format("%X", labelColor).substring(2); // !!strip alpha value!! 

Html.fromHtml(String.format("<font color=\"#%s\">text</font>", сolorString), TextView.BufferType.SPANNABLE); 
+0

красиво сделано.полезно использовать цвета из ресурсов ваших приложений. – speedynomads

+0

Я хочу подчеркнуть вторую строчку, где вы подстроки цвета hex: альфа-значение сделало бы настройку цвета недействительной! Не забывайте! – Marco

0
textview.setText(Html.fromHtml("<font color='rgb'>"+text contain+"</font>")); 

Это даст цвет именно то, что вы сделали в редакторе HTML, просто установите TextView и конкатенируйте его с текстовым значением. Android не поддерживает цвет span, меняет цвет шрифта в редакторе, и вы все готовы к работе.

0

шрифт не рекомендуется использовать SPAN вместо Html.fromHtml ("" + Содержание + "")

0
String name = modelOrderList.get(position).getName(); //get name from List 
    String text = "<font color='#000000'>" + name + "</font>"; //set Black color of name 
    /* check API version, according to version call method of Html class */ 
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N) { 
     Log.d(TAG, "onBindViewHolder: if"); 
     holder.textViewName.setText(context.getString(R.string._5687982) + " "); 
     holder.textViewName.append(Html.fromHtml(text)); 
    } else { 
     Log.d(TAG, "onBindViewHolder: else"); 
     holder.textViewName.setText("123456" + " "); //set text 
     holder.textViewName.append(Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY)); //append text into textView 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^