texto studio solo propiedades mostrar mayusculas letras inputtype español edittext caja android text typography

studio - propiedades edittext android



Pequeñas mayúsculas en TextViews, EditTexts y botones en Android (6)

¿Hay algo que pueda hacer para que el texto se vea en mayúsculas / capital? Como se describe aquí: http://en.wikipedia.org/wiki/Small_caps . Usé un convertidor pero faltan algunos caracteres.


en XML el texto de edición tiene la propiedad: android: capitalize = ""


Disculpas por haber arrastrado una pregunta muy antigua.

Me gustó el enfoque de @kcoppock para esto, pero desafortunadamente a la fuente que estoy usando le faltan los caracteres de pequeña capitalización. Sospecho que muchos otros se encontrarán en esta situación.

Eso me inspiró a escribir un pequeño método util que tomará una cadena de mayúsculas y minúsculas (por ejemplo, Small Caps ) y creará una cadena formateable que se Sᴍᴀʟʟ Cᴀᴘs como Sᴍᴀʟʟ Cᴀᴘs pero solo usará los caracteres estándar de AZ.

  • Funciona con cualquier fuente que tenga los caracteres AZ ; no se requiere nada especial
  • Es fácilmente utilizable en un TextView (o cualquier otra vista basada en texto, para el caso)
  • No requiere ningún HTML
  • No requiere ninguna edición de sus cadenas originales

He presentado el código aquí: https://gist.github.com/markormesher/3e912622d339af01d24e


Simplemente llame a esta función getSmallCaps (texto):

public SpannableStringBuilder getSmallCaps(String text) { text = text.toUpperCase(); text = text.trim(); SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(); if (text.contains(" ")) { String[] arr = text.split(" "); for (int i = 0; i < arr.length; i++) { spannableStringBuilder.append(getSpannableStringSmallCaps(arr[i])); spannableStringBuilder.append(" "); } } else { spannableStringBuilder=getSpannableStringSmallCaps(text); } return spannableStringBuilder; } public SpannableStringBuilder getSpannableStringSmallCaps(String text) { SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder( text); spannableStringBuilder.setSpan(new AbsoluteSizeSpan(36), 0, 1, 0); spannableStringBuilder.setSpan(new StyleSpan(Typeface.BOLD), 0, 1, 0); spannableStringBuilder.setSpan(new StyleSpan(Typeface.BOLD), 1, text.length(), 0); return spannableStringBuilder; }


Este no es mi código pero funciona perfectamente.

public SpannableString getSmallCapsString(String input) { // values needed to record start/end points of blocks of lowercase letters char[] chars = input.toCharArray(); int currentBlock = 0; int[] blockStarts = new int[chars.length]; int[] blockEnds = new int[chars.length]; boolean blockOpen = false; // record where blocks of lowercase letters start/end for (int i = 0; i < chars.length; ++i) { char c = chars[i]; if (c >= ''a'' && c <= ''z'') { if (!blockOpen) { blockOpen = true; blockStarts[currentBlock] = i; } // replace with uppercase letters chars[i] = (char) (c - ''a'' + ''/u0041''); } else { if (blockOpen) { blockOpen = false; blockEnds[currentBlock] = i; ++currentBlock; } } } // add the string end, in case the last character is a lowercase letter blockEnds[currentBlock] = chars.length; // shrink the blocks found above SpannableString output = new SpannableString(String.valueOf(chars)); for (int i = 0; i < Math.min(blockStarts.length, blockEnds.length); ++i) { output.setSpan(new RelativeSizeSpan(0.8f), blockStarts[i], blockEnds[i], Spannable.SPAN_EXCLUSIVE_INCLUSIVE); } return output; }

Ejemplo:

SpannableString setStringObj = getSmallCapsStringTwo("Object"); tvObj.setText(setStringObj);


EDITAR 2015-08-02 : A partir de API 21 (Lollipop), simplemente puede agregar:

android:fontFeatureSettings="smcp"

a su declaración TextView en XML, o en tiempo de ejecución, invoque:

textView.setFontFeatureSettings("smcp");

Por supuesto, esto solo funciona para la API 21 en adelante, por lo que aún tendrá que manejar la solución anterior manualmente hasta que solo soporte Lollipop y superior.

Siendo un poco fanático de la tipografía en el fondo, esta parecía una muy buena pregunta. Tengo que aprender un poco más sobre Unicode hoy, así como también una respuesta para tu pregunta. :)

En primer lugar, deberá tener una fuente que incluya caracteres "actuales" de caracteres pequeños. Supongo que ya lo sabes, ya que lo estás preguntando, pero normalmente la mayoría de las fuentes profesionales incluyen estas. Lamentablemente, la mayoría de las fuentes profesionales no tienen licencia para su distribución, por lo que es posible que no pueda usarlas en su aplicación. De todos modos, en el caso de que encuentres uno (utilicé Chaparral Pro como ejemplo aquí), así es como puedes obtener pequeñas capitalizaciones.

A partir de esta respuesta , descubrí que los caracteres de letra pequeña (para AZ) se encuentran a partir de Unicode-UF761. Así que construí un mapeo de estos personajes:

private static char[] smallCaps = new char[] { ''/uf761'', //A ''/uf762'', ''/uf763'', ''/uf764'', ''/uf765'', ''/uf766'', ''/uf767'', ''/uf768'', ''/uf769'', ''/uf76A'', ''/uf76B'', ''/uf76C'', ''/uf76D'', ''/uf76E'', ''/uf76F'', ''/uf770'', ''/uf771'', ''/uf772'', ''/uf773'', ''/uf774'', ''/uf775'', ''/uf776'', ''/uf777'', ''/uf778'', ''/uf779'', ''/uf77A'' //Z };

Luego se agregó un método de ayuda para convertir una cadena de entrada a una cuyas letras minúsculas han sido reemplazadas por sus equivalentes de mayúsculas pequeñas:

private static String getSmallCapsString (String input) { char[] chars = input.toCharArray(); for(int i = 0; i < chars.length; i++) { if(chars[i] >= ''a'' && chars[i] <= ''z'') { chars[i] = smallCaps[chars[i] - ''a'']; } } return String.valueOf(chars); }

Entonces solo usa eso en cualquier lugar:

String regularCase = "The quick brown fox jumps over the lazy dog."; textView.setText(getSmallCapsString(regularCase));

Por lo que obtuve el siguiente resultado: