C'è qualcosa che posso fare per rendere il testo in maiuscoletto/maiuscolo? Come descritto qui: http://en.wikipedia.org/wiki/Small_caps. Ho usato un convertitore ma mancano alcuni caratteri.Maiuscoletto in TextView, EditTexts e Pulsanti in Android
risposta
EDIT 2015/08/02: A partire dal 21 API (Lollipop) si può semplicemente aggiungere:
android:fontFeatureSettings="smcp"
al vostro TextView
dichiarazione in XML, o in fase di esecuzione, richiamare:
textView.setFontFeatureSettings("smcp");
Naturalmente, questo funziona solo per API 21 e in alto, quindi dovresti ancora gestire manualmente la vecchia soluzione finché non supporti solo Lollipop e versioni successive.
Essendo un po 'geek tipografia al cuore, questa mi è sembrata una domanda davvero buona. Ho avuto modo di imparare un po 'di più su Unicode oggi, oltre che una risposta alla tua domanda. :)
Innanzitutto, è necessario disporre di un carattere che includa caratteri "reali" di maiuscoletto. Presumo che tu lo sappia da quando lo chiedi, ma in genere i font più professionali includono questi. Sfortunatamente molti font professionali non sono autorizzati per la distribuzione, quindi potresti non essere in grado di usarli nella tua applicazione. Ad ogni modo, nel caso in cui si trovi do trovarne uno (ho usato Chaparral Pro come esempio qui), questo è il modo in cui è possibile ottenere maiuscoletto.
Da this answer Ho trovato che i caratteri maiuscoletto (per A-Z) si trovano a partire da Unicode-UF761. Così ho costruito una mappatura di questi personaggi:
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
};
Poi ha aggiunto un metodo di supporto per convertire una stringa di input a uno le cui lettere minuscole sono stati sostituiti dai loro MAIUSCOLETTO equivalenti:
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);
}
Poi basta usare che ovunque:
String regularCase = "The quick brown fox jumps over the lazy dog.";
textView.setText(getSmallCapsString(regularCase));
Per cui ho ottenuto il seguente risultato:
Grazie per l'ottima risposta! L'ho provato ma mi ha dato caratteri cinesi? – naz
Sì, dovrai usare un carattere che include caratteri maiuscoletto per far funzionare tutto questo. Tipicamente un font OpenType. – kcoppock
come si visualizza il codice uf000? Se ho un font quale strumento posso usare? Impossibile cercare perché non so quale parola chiave utilizzare. grazie – naz
in XML modificare il testo ha la proprietà: android: capitalizzare = ""
Ma saranno le piccole capitali come vuole OP? Non sono sicuro che lo –
provi prima questo in xml. – deepak825
@ deepak825 qualsiasi cosa tu fornisca qui come risposta dovrebbe essere aggiunta nei commenti. –
trovato un'alternativa qui Is it possible to have multiple styles inside a TextView?
Fondamentalmente è possibile utilizzare i tag html formattazione la dimensione dei caratteri e dare un piccolo effetto tappi ....
Ci scusiamo per il trascinamento di una domanda molto vecchio .
Mi è piaciuto l'approccio di @kcoppock a questo, ma sfortunatamente il carattere che sto usando manca dei caratteri a caratteri piccoli. Sospetto che molti altri si troveranno in questa situazione.
Questo mi ha spinto a scrivere un piccolo metodo util che prenderà una stringa mista (ad es.Small Caps
) e creare una stringa formattabile che può contenere comeSᴍᴀʟʟ Cᴀᴘs
ma utilizza solo i caratteri A-Z standard.
- Funziona con qualsiasi tipo di carattere che ha i caratteri
A-Z
- niente di speciale richiesto - È facilmente utilizzabile in un TextView (o qualsiasi altra vista basato su testo, se è per questo)
- Non fa richiede alcun HTML
- non richiede alcuna modifica delle corde originali
ho posato il codice qui: https://gist.github.com/markormesher/3e912622d339af01d24e
Basta chiamare questa funzione getSmallCaps (testo):
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;
}
Com'è questa piccola capsula? –
Questo non è il mio codice, ma le sue opere perfettamente.
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;
}
Esempio:
SpannableString setStringObj = getSmallCapsStringTwo("Object"); tvObj.setText(setStringObj);
- 1. Pulsanti radio con TextView in RadioGroup
- 2. TextView cliccabile in Android
- 3. TextView verticale in Android
- 4. Android: hashtag in TextView
- 5. Scrolling Textview in android
- 6. EditText setOnFocusChangeListener su tutti EditTexts
- 7. TextView Android in BOLD e testo normale
- 8. Android: ListView con EditTexts mette a fuoco e IME
- 9. Done non funziona in softKeyboard in Autocomplete TextView in Android
- 10. Combinazione di SurfaceView con altre visualizzazioni come TextView e Pulsanti
- 11. Android - Centro Textview in LinearLayout
- 12. all'interno di TextView in Android
- 13. Modifica dell'opacità TextView in Android
- 14. Textview non scorrevole in Android
- 15. Multi TextView carattere in Android
- 16. Android TextView italica e wrap_contents
- 17. Android: "nowrap" in Spannable in TextView
- 18. come convertire TextView in ImageView in Android
- 19. Array di pulsanti in Android
- 20. TextView Android
- 21. barra dei pulsanti in basso in Android
- 22. Android ottenere la data corrente e mostrarlo in TextView
- 23. Visualizza caratteri unicode in TextView Android
- 24. disegnare la riga in TextView su Android
- 25. Autolink all'interno di un TextView in Android
- 26. come cambiare il testo in Android TextView
- 27. Android - Centro TextView orizzontalmente in LinearLayout
- 28. Dichiarare EditText come TextView in Android
- 29. Android BroadcastReceiver onReceive Aggiorna TextView in MainActivity
- 30. Android: testo a scorrimento automatico in TextView
Benvenuti a Stack Overflow http://stackoverflow.com/faq – Triode
si vuole carattere personalizzato per i vostri campi di testo? – Raghunandan