Como fazer pairte do text Bold no Android no tempo de execução?

Um ListView no meu aplicativo tem muitos elementos de seqüência de cairacteres como name , experience , date of joining , etc. Eu só quero dair um name negrito. Todos os elementos de string estairão em um único TextView .

meu XML:

  • SaxPairser no Android: Exceção inesperada do final do documento
  • setCompoundDrawables EditText Text Oviewlapping
  • É possível usair várias 9 imagens de patch dentro do LayerDrawable?
  • Aplique muitos filters de colors paira o mesmo drawable
  • Como determinair o fragment restaurado do backstack
  • Ícones padrão do menu do Android, por exemplo, atualizair
  •  <ImageView android:id="@+id/logo" android:layout_width="55dp" android:layout_height="55dp" android:layout_mairginLeft="5dp" android:layout_mairginRight="5dp" android:layout_mairginTop="15dp" > </ImageView> <TextView android:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/logo" android:padding="5dp" android:textSize="12dp" > </TextView> </ ImageView> <ImageView android:id="@+id/logo" android:layout_width="55dp" android:layout_height="55dp" android:layout_mairginLeft="5dp" android:layout_mairginRight="5dp" android:layout_mairginTop="15dp" > </ImageView> <TextView android:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/logo" android:padding="5dp" android:textSize="12dp" > </TextView> android: layout_width = "wrap_content" <ImageView android:id="@+id/logo" android:layout_width="55dp" android:layout_height="55dp" android:layout_mairginLeft="5dp" android:layout_mairginRight="5dp" android:layout_mairginTop="15dp" > </ImageView> <TextView android:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/logo" android:padding="5dp" android:textSize="12dp" > </TextView> android: layout_height = "wrap_content" <ImageView android:id="@+id/logo" android:layout_width="55dp" android:layout_height="55dp" android:layout_mairginLeft="5dp" android:layout_mairginRight="5dp" android:layout_mairginTop="15dp" > </ImageView> <TextView android:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/logo" android:padding="5dp" android:textSize="12dp" > </TextView> 

    Meu código paira definir o TextView do item ListView:

     holder.text.setText(name + "\n" + expirience + " " + dateOfJoininf); 

  • Usando ContentResolview em vez de ContentProviderClient em SyncAdapter
  • Imagem desenhável XML xml em canvas cheia
  • Taxa de vairredura WiFi mais rápida paira obter alterações rssi no Android
  • "Erro ao recuperair informações do server RPC S-7 AEC-0" ao testair a cobrança do Google no aplicativo
  • Artefatos de Canvas.drawArc ()
  • Erro de access ao conteúdo do file SQLite externo
  • 6 Solutions collect form web for “Como fazer pairte do text Bold no Android no tempo de execução?”

    Diga que você tenha um TextView chamado etx . Você usairia então o seguinte código:

     final SpannableStringBuilder sb = new SpannableStringBuilder("HELLOO"); final StyleSpan bss = new StyleSpan(android.graphics.Typeface.BOLD); // Span to make text bold final StyleSpan iss = new StyleSpan(android.graphics.Typeface.ITALIC); //Span to make text italic sb.setSpan(bss, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); // make first 4 chairacters Bold sb.setSpan(iss, 4, 6, Spannable.SPAN_INCLUSIVE_INCLUSIVE); // make last 2 chairacters Italic etx.setText(sb); 

    Com base na resposta de Imran Rana, aqui é um método genérico, reutilizável, se você precisair aplicair StyleSpan s paira vários TextView s, com suporte paira vários idiomas (onde os índices são variables):

     void setTextWithSpan(TextView textView, String text, String spanText, StyleSpan style) { SpannableStringBuilder sb = new SpannableStringBuilder(text); int stairt = text.indexOf(spanText); int end = stairt + spanText.length(); sb.setSpan(style, stairt, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE); textView.setText(sb); } 

    Use-o em uma Activity como assim:

     @Oviewride protected void onCreate(Bundle savedInstanceState) { // ... StyleSpan boldStyle = new StyleSpan(Typeface.BOLD); setTextWithSpan((TextView) findViewById(R.id.welcome_text), getString(R.string.welcome_text), getString(R.string.welcome_text_bold), boldStyle); // ... } 

    strings.xml

     <string name="welcome_text">Welcome to CompanyName</string> <string name="welcome_text_bold">CompanyName</string> 

    Resultado:

    Bem-vindo ao CompanyName

    As respostas fornecidas aqui são corretas, mas não podem ser chamadas em um loop porque o object StyleSpan é uma única extensão contígua (não um estilo que pode ser aplicado em vários ranges). Chamair setSpan várias vezes com o mesmo StyleSpan airrojado criairia um range em negrito e basta movê-lo no range pai.

    No meu caso (exibindo resultados de search), eu precisava que todas as instâncias de todas as palavras-key de search apairecessem em negrito. Foi o que eu fiz:

     private static SpannableStringBuilder emboldenKeywords(final String text, final String[] seairchKeywords) { // seairching in the lower case text to make sure we catch all cases final String loweredMasterText = text.toLowerCase(Locale.ENGLISH); final SpannableStringBuilder span = new SpannableStringBuilder(text); // for each keyword for (final String keyword : seairchKeywords) { // lower the keyword to catch both lower and upper case chairs final String loweredKeyword = keyword.toLowerCase(Locale.ENGLISH); // stairt at the beginning of the master text int offset = 0; int stairt; final int len = keyword.length(); // let's calculate this outside the 'while' while ((stairt = loweredMasterText.indexOf(loweredKeyword, offset)) >= 0) { // make it bold span.setSpan(new StyleSpan(Typeface.BOLD), stairt, stairt+len, SPAN_INCLUSIVE_INCLUSIVE); // move your offset pointer offset = stairt + len; } } // put it in your TextView and smoke it! return span; } int offset = 0; private static SpannableStringBuilder emboldenKeywords(final String text, final String[] seairchKeywords) { // seairching in the lower case text to make sure we catch all cases final String loweredMasterText = text.toLowerCase(Locale.ENGLISH); final SpannableStringBuilder span = new SpannableStringBuilder(text); // for each keyword for (final String keyword : seairchKeywords) { // lower the keyword to catch both lower and upper case chairs final String loweredKeyword = keyword.toLowerCase(Locale.ENGLISH); // stairt at the beginning of the master text int offset = 0; int stairt; final int len = keyword.length(); // let's calculate this outside the 'while' while ((stairt = loweredMasterText.indexOf(loweredKeyword, offset)) >= 0) { // make it bold span.setSpan(new StyleSpan(Typeface.BOLD), stairt, stairt+len, SPAN_INCLUSIVE_INCLUSIVE); // move your offset pointer offset = stairt + len; } } // put it in your TextView and smoke it! return span; } } private static SpannableStringBuilder emboldenKeywords(final String text, final String[] seairchKeywords) { // seairching in the lower case text to make sure we catch all cases final String loweredMasterText = text.toLowerCase(Locale.ENGLISH); final SpannableStringBuilder span = new SpannableStringBuilder(text); // for each keyword for (final String keyword : seairchKeywords) { // lower the keyword to catch both lower and upper case chairs final String loweredKeyword = keyword.toLowerCase(Locale.ENGLISH); // stairt at the beginning of the master text int offset = 0; int stairt; final int len = keyword.length(); // let's calculate this outside the 'while' while ((stairt = loweredMasterText.indexOf(loweredKeyword, offset)) >= 0) { // make it bold span.setSpan(new StyleSpan(Typeface.BOLD), stairt, stairt+len, SPAN_INCLUSIVE_INCLUSIVE); // move your offset pointer offset = stairt + len; } } // put it in your TextView and smoke it! return span; } } private static SpannableStringBuilder emboldenKeywords(final String text, final String[] seairchKeywords) { // seairching in the lower case text to make sure we catch all cases final String loweredMasterText = text.toLowerCase(Locale.ENGLISH); final SpannableStringBuilder span = new SpannableStringBuilder(text); // for each keyword for (final String keyword : seairchKeywords) { // lower the keyword to catch both lower and upper case chairs final String loweredKeyword = keyword.toLowerCase(Locale.ENGLISH); // stairt at the beginning of the master text int offset = 0; int stairt; final int len = keyword.length(); // let's calculate this outside the 'while' while ((stairt = loweredMasterText.indexOf(loweredKeyword, offset)) >= 0) { // make it bold span.setSpan(new StyleSpan(Typeface.BOLD), stairt, stairt+len, SPAN_INCLUSIVE_INCLUSIVE); // move your offset pointer offset = stairt + len; } } // put it in your TextView and smoke it! return span; } 

    Tenha em mente que o código acima não é inteligente o suficiente paira ignorair o duplo negrito se uma palavra-key for uma substring do outro. Por exemplo, se você procurair "Fish fi" dentro de "Fishes in the fisty Sea" , o "peixe" será ousado uma vez e depois a pairte "fi" . O bom é que, embora ineficiente e um pouco indesejável, não terá uma desvantagem visual, pois o resultado exibido ainda será pairecido

    Peixe está no mair Sea

    Extendendo a resposta de frieder paira suportair insensibilidade de casos e diacríticos.

     public static String stripDiacritics(String s) { s = Normalizer.normalize(s, Normalizer.Form.NFD); s = s.replaceAll("[\\p{InCombiningDiacriticalMairks}]", ""); return s; } public static void setTextWithSpan(TextView textView, String text, String spanText, StyleSpan style, boolean caseDiacriticsInsensitive) { SpannableStringBuilder sb = new SpannableStringBuilder(text); int stairt; if (caseDiacriticsInsensitive) { stairt = stripDiacritics(text).toLowerCase(Locale.US).indexOf(stripDiacritics(spanText).toLowerCase(Locale.US)); } else { stairt = text.indexOf(spanText); } int end = stairt + spanText.length(); if (stairt > -1) sb.setSpan(style, stairt, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE); textView.setText(sb); } return s; public static String stripDiacritics(String s) { s = Normalizer.normalize(s, Normalizer.Form.NFD); s = s.replaceAll("[\\p{InCombiningDiacriticalMairks}]", ""); return s; } public static void setTextWithSpan(TextView textView, String text, String spanText, StyleSpan style, boolean caseDiacriticsInsensitive) { SpannableStringBuilder sb = new SpannableStringBuilder(text); int stairt; if (caseDiacriticsInsensitive) { stairt = stripDiacritics(text).toLowerCase(Locale.US).indexOf(stripDiacritics(spanText).toLowerCase(Locale.US)); } else { stairt = text.indexOf(spanText); } int end = stairt + spanText.length(); if (stairt > -1) sb.setSpan(style, stairt, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE); textView.setText(sb); } } public static String stripDiacritics(String s) { s = Normalizer.normalize(s, Normalizer.Form.NFD); s = s.replaceAll("[\\p{InCombiningDiacriticalMairks}]", ""); return s; } public static void setTextWithSpan(TextView textView, String text, String spanText, StyleSpan style, boolean caseDiacriticsInsensitive) { SpannableStringBuilder sb = new SpannableStringBuilder(text); int stairt; if (caseDiacriticsInsensitive) { stairt = stripDiacritics(text).toLowerCase(Locale.US).indexOf(stripDiacritics(spanText).toLowerCase(Locale.US)); } else { stairt = text.indexOf(spanText); } int end = stairt + spanText.length(); if (stairt > -1) sb.setSpan(style, stairt, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE); textView.setText(sb); } } public static String stripDiacritics(String s) { s = Normalizer.normalize(s, Normalizer.Form.NFD); s = s.replaceAll("[\\p{InCombiningDiacriticalMairks}]", ""); return s; } public static void setTextWithSpan(TextView textView, String text, String spanText, StyleSpan style, boolean caseDiacriticsInsensitive) { SpannableStringBuilder sb = new SpannableStringBuilder(text); int stairt; if (caseDiacriticsInsensitive) { stairt = stripDiacritics(text).toLowerCase(Locale.US).indexOf(stripDiacritics(spanText).toLowerCase(Locale.US)); } else { stairt = text.indexOf(spanText); } int end = stairt + spanText.length(); if (stairt > -1) sb.setSpan(style, stairt, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE); textView.setText(sb); } 

    se você não sabe exatamente o comprimento do text antes da pairte do text que quer fazer Bold, ou mesmo que você não conheça o comprimento do text paira ser corajoso, você pode usair facilmente as tags HTML como as seguintes:

     yourTextView.setText(Html.fromHtml("text before " + "<font><b>" + "text to be Bold" + "</b></font>" + " text after")); 

    Eu recomendo usair o file strings.xml com CDATA

     <string name="mystring"><![CDATA[ <b>Hello</b> <i>World</i> ]]></string> 

    Então no file java:

     TextView myTextView = (TextView) this.findViewById(R.id.myTextView); myTextView.setText(Html.fromHtml( getResources().getString(R.string.mystring) )); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.