Dize kaynağı, uygulamanız için metin dizeleri sağlar isteğe bağlı metin stili ve biçimlendirme ile. Size sunabileceğiniz üç tür kaynak vardır: aşağıdaki adımları uygulayın:
- String
- Tek bir dize sağlayan XML kaynağı.
- Dize Dizisi
- Dize dizisi sağlayan XML kaynağı.
- Miktar Dizeleri (Çoğunlukla)
- Çoğullaştırma için farklı dizeler içeren XML kaynağı.
Tüm dizeler, bazı stil işaretleme ve biçimlendirme bağımsız değişkenlerini uygulayabilir. Örneğin, dizeleri biçimlendirme ve biçimlendirme hakkında bilgi edinmek için Biçimlendirme ve Stil bölümüne bakın.
Dize
Uygulamadan veya diğer kaynak dosyalarından ( kullanabilirsiniz.
Not: Dize, başvurulan basit bir kaynaktır
(XML dosyasının adı değil) name
özelliğinde sağlanan değeri kullanarak. Böylece siz de
tek bir XML dosyasında dize kaynaklarını diğer basit kaynaklarla birleştirir.
bir <resources>
öğesinin altında.
- dosya konumu:
Dosya adı rastgele seçilmiştir.<string>
öğesininname
, kaynak kimliği.- derlenen kaynak veri türü:
- Kaynak işaretçisi bir
String
. - kaynak referansı:
- .
Java'da:
R.string.string_name
XML'de:@string/string_name
- söz dizimi:
-
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="string_name" >text_string</string> </resources>
- öğeler:
- örnek:
- XML dosyası
res/values/strings.xml
itibarıyla kaydedildi:<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello!</string> </resources>
Bu düzen XML'i, Görünüme bir dize uygular:
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" />
Bu uygulama kodu bir dize alır:
getString(int)
veya Dize almak içingetText(int)
.getText(int)
, dizeye uygulanan tüm zengin metin stillerini korur.
res/values/filename.xml
Dize dizisi
Uygulamadan başvurulabilecek bir dize dizisi.
Not: Dize dizisi, referans verilen basit bir kaynaktır
(XML dosyasının adı değil) name
özelliğinde sağlanan değeri kullanarak. Farklı
dize dizisi kaynaklarını diğer basit kaynaklarla tek bir XML dosyasında birleştirebilirsiniz.
bir <resources>
öğesinin altında.
- dosya konumu:
Dosya adı rastgele seçilmiştir.<string-array>
öğesininname
, kaynak kimliği.- derlenen kaynak veri türü:
- Kaynak işaretçisi
String
dizisinden oluşur. - kaynak referansı:
- .
Java'da:
R.array.string_array_name
XML'de:@[package:]array/string_array_name
- söz dizimi:
-
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="string_array_name"> <item >text_string</item> </string-array> </resources>
- öğeler:
- örnek:
- XML dosyası
res/values/strings.xml
itibarıyla kaydedildi:<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="planets_array"> <item>Mercury</item> <item>Venus</item> <item>Earth</item> <item>Mars</item> </string-array> </resources>
Bu uygulama kodu bir dize dizisi alır:
Kotlin
val array: Array<String> =
resources
.getStringArray
(R.array.planets_array)Java
Resources res =
getResources()
; String[] planets = res.getStringArray
(R.array.planets_array);
res/values/filename.xml
Miktar dizeleri (çoğul)
Farklı dillerin, miktarla dil bilgisi anlaşması için farklı kuralları vardır. İngilizcede
Örneğin, miktar 1 özel bir durumdur. "1 kitap" yazıyoruz, ancak diğer miktarlar için
"n kitap" yazın. Tekil ve çoğul arasındaki bu ayrım çok yaygındır, ancak
daha hassas ayrımlar yapar. Android tarafından desteklenen tam set zero
şeklindedir.
one
, two
, few
, many
ve other
.
Belirli bir dil ve miktar için hangi olgunun kullanılacağına karar vermeye yönelik kurallar çok karmaşık olabilir.
Android size
Seçmek için getQuantityString()
bir yöntem belirleyin.
Eskiden "miktar dizeleri" olarak adlandırılsa da (ve API'de de buna hâlâ çağrılıyor), miktar
dizeler yalnızca çoğullar için kullanılmalıdır. Tutarsızlık dizeleri kullanarak
Gmail'in "Gelen Kutusu" veya herhangi bir web ile "Gelen Kutusu (12)" karşılaştırması okunmamış iletiler olduğunda
örneğine bakalım. if
ifadesi yerine miktar dizeleri kullanmak daha uygun görünebilir.
ancak bazı dillerde (ör. Çince) bu dilin dilbilgisi kurallarına
hiçbir ayrım yoktur. Dolayısıyla her zaman other
dizesini elde edersiniz.
Kullanılacak dize seçimi, yalnızca dil bilgisinin gerekliliğine göre yapılır.
İngilizcede miktar 0 olsa bile zero
dizesi yoksayılır çünkü 0
dil bilgisi olarak 2'den veya 1 ("sıfır kitap", "bir kitap",
"iki kitap" vb.) kullanın. Buna karşılık, yalnızca Korecede other
dizesi
emin olabilirsiniz.
Örneğin, two
teriminin yalnızca bu anahtar kelime için geçerli
miktar 2: bir dilde 2, 12, 102 (vb.) tek bir sayı gibi ele alınmasını gerektirebilir
ama diğer miktarlardan farklıdır. Hangi farklılıkların olduğunu bilmek için çevirmeninize güvenin
konusunda ısrarcı olabilir.
İletiniz miktar numarasını içermiyorsa, büyük olasılıkla şuna ilişkin iyi bir aday değildir: çoğul. Örneğin, Litvancada hem 1 hem de 101 için tekil biçim kullanılır. Dolayısıyla "1 kitap" : "1 knyga" ve "101 kitap" olarak çevrildi. "101 knyga" olarak çevrilir. Aynı zamanda "bir kitap" "knyga" mı? ve "birçok kitap" değeri "daug knyg↘" şeklindedir. İngilizce çoğul bir mesajda "bir kitap" söz konusuysa (tekil) ve "birçok kitap" (çoğul) olmadan gerçek sayı, "knyga" şeklinde çevrilebilir. (kitap)/"daug knyg↘" (birçok kitap), ancak Litvanca kurallarında "knyga" ifadesi gösterilir (tek bir kitap), sayı 101 olduğunda.
Çoğu zaman, "Kitaplar: 1". Böylece, hem hayatınız hem de çevirmenleriniz uygulamanız için kabul edilebilir bir stil olduğunda, hayatınızı kolaylaştırır.
API 24 ve sonraki sürümlerde çok daha güçlü olan ICU MessageFormat
'yı kullanabilirsiniz.
sınıfını kullanır.
Not: Çoğullar koleksiyonu,
name
özelliğinde (XML'in adı değil) sağlanan değer kullanılarak referans verildi
dosyası) ekleyebilirsiniz. Bu nedenle, çoğul kaynakları diğer basit kaynaklarla bir arada kullanabilirsiniz.
XML dosyası, bir <resources>
öğesinin altında.
- dosya konumu:
Dosya adı rastgele seçilmiştir.<plurals>
öğesininname
, kaynak kimliği.- kaynak referansı:
- .
Java'da:
R.plurals.plural_name
- söz dizimi:
-
<?xml version="1.0" encoding="utf-8"?> <resources> <plurals name="plural_name"> <item quantity=["zero" | "one" | "two" | "few" | "many" | "other"] >text_string</item> </plurals> </resources>
- öğeler:
- örnek:
- XML dosyası
res/values/strings.xml
itibarıyla kaydedildi:<?xml version="1.0" encoding="utf-8"?> <resources> <plurals name="numberOfSongsAvailable"> <!-- As a developer, you should always supply "one" and "other" strings. Your translators will know which strings are actually needed for their language. Always include %d in "one" because translators will need to use %d for languages where "one" doesn't mean 1 (as explained above). --> <item quantity="one">%d song found.</item> <item quantity="other">%d songs found.</item> </plurals> </resources>
res/values-pl/strings.xml
itibarıyla kaydedilen XML dosyası:<?xml version="1.0" encoding="utf-8"?> <resources> <plurals name="numberOfSongsAvailable"> <item quantity="one">Znaleziono %d piosenkę.</item> <item quantity="few">Znaleziono %d piosenki.</item> <item quantity="other">Znaleziono %d piosenek.</item> </plurals> </resources>
Kullanım:
Kotlin
val count = getNumberOfSongsAvailable() val songsFound = resources.
getQuantityString
(R.plurals.numberOfSongsAvailable, count, count)Java
int count = getNumberOfSongsAvailable(); Resources res =
getResources()
; String songsFound = res.getQuantityString
(R.plurals.numberOfSongsAvailable, count, count);getQuantityString()
yöntemini kullanırken, dizeniz şunu içeriyorsacount
yöntemini iki kez iletmeniz gerekir: dize biçimlendirmesi değerini kullanın. Örneğin,%d songs found
, ilkcount
parametresi uygun çoğul dizeyi seçer ve ikincicount
parametresi%d
yer tutucusuna eklenir. Çoğul dizeler dize biçimlendirmesi içermez. Üçüncü parametreyigetQuantityString
öğesine aktarmanız gerekmez.
res/values/filename.xml
Biçim ve stil
Nasıl doğru şekilde iletişim kuracağınızla ilgili bilmeniz gereken dize kaynaklarınızı biçimlendirin ve stillerini belirleyin.
Özel karakterleri kullanma
Bir dize XML'de özel kullanım olan karakterler içerdiğinde karakterlerinin standart XML/HTML çıkış kurallarına göre ayarlanması gerekir. Bir karakterden kaçınmanız gerekirse başına ters eğik çizgi eklemeniz önerilir.
Android, varsayılan olarak boşluk karakteri dizilerini tek bir boşluk olacak şekilde daraltır. Dizenizin ilgili bölümünü çift tırnak içine alarak bunu önleyebilirsiniz. Bu durumda tüm boşluk karakterleri (yeni satırlar dahil) tırnak işareti içinde korunur. Çift tırnak işareti, normal tek çıkış karaktersiz tırnak işareti de kullanmanıza olanak tanır.
Karakter | Çıkış karakterli formlar |
---|---|
@ | \@ |
? | \? |
Yeni satır | \n |
Sekme | \t |
U+XXXX Unicode karakteri | \uXXXX |
Tek tırnak işareti (' ) |
Şunlardan herhangi biri:
|
Çift tırnak işareti (" ) |
\"
Dizeyi tek tırnak işareti içine almanın işe yaramadığını unutmayın. |
Boşlukların daraltılması ve Android'e çıkış,
kaynak dosyası XML olarak ayrıştırılır. Bunun anlamı,
<string>      </string>
.
(boşluk, noktalama boşluğu, Unicode Em boşluk) tek bir boşluk olacak şekilde daraltılır
(" "
) çünkü dosya XML olarak ayrıştırıldıktan sonraki tüm Unicode boşluklarıdır.
Bu alanları olduğu gibi korumak için alıntı yapabilirsiniz.
(<string>"      "</string>
)
veya Android kaçış özelliğini kullanın.
(<string> \u0032 \u8200 \u8195</string>
).
Not: XML ayrıştırıcısının bakış açısından,
<string>"Test this"</string>
ve
Sonuç olarak <string>"Test this"</string>
. Her iki form
tırnak işareti göstermez ancak Android boşluklarını koruyan alıntılama işlemini tetikler (
uygulamalı etki).
Dizeleri biçimlendirme
Dizelerinizi biçimlendirmeniz gerekiyorsa bunu, biçim bağımsız değişkenlerinizi dize kaynağına koyarak yapabilirsiniz. aşağıdaki örnek kaynakta gösterildiği gibidir.
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
Bu örnekte, biçim dizesinde iki bağımsız değişken vardır: %1$s
bir dizedir, %2$d
ondalık bir sayıdır. Ardından getString(int, Object...)
yöntemini çağırarak dizeyi biçimlendirin. Örnek:
Kotlin
var text = getString(R.string.welcome_messages, username, mailCount)
Java
String text = getString(R.string.welcome_messages, username, mailCount);
HTML işaretlemesiyle stil belirleme
HTML işaretlemesi ile dizelerinize stil ekleyebilirsiniz. Örnek:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="welcome">Welcome to <b>Android</b>!</string> </resources>
Aşağıdaki HTML öğeleri desteklenir:
- Kalın: <b>
- İtalik: <i>, <citation>, <dfn>, <em>
- %25 daha büyük metin: <big>
- %20 daha küçük metin: <small>
- Yazı tipi özelliklerini ayarlama: <font Face=”font_family“ color=”hex_color”>. Örnekler
Olası yazı tipi aileleri şunlardır:
monospace
,serif
vesans_serif
. - Tek aralıklı yazı tipi ailesi ayarlama: <tt>
- Üstü çizili: <s>, <strike>, <del>
- Altı çizili: <u>
- Üst simge: <sup>
- Alt simge: <sub>
- Madde işaretleri: <ul>, <li>
- Satır sonları: <br>
- Bölüm: <div>
- CSS stili: <span style=”color|background_color|text-decoration”>
- Paragraflar: <p dir=”rtl | ltr” style=”...”>
Biçimlendirme uygulamıyorsanız TextView metnini doğrudan
setText(java.lang.CharSequence)
Ancak bazı durumlarda,
biçim dizesi olarak da kullanılan stilize edilmiş bir metin kaynağı oluşturmak istiyorsunuz. Normalde bu
çalışmaz çünkü format(String, Object...)
ve
getString(int, Object...)
yöntemi tüm stilleri ayıklar
bilgi ekler. Bu sorunun geçici çözümü, HTML etiketlerini çıkış karakterli
ve daha sonra fromHtml(String)
ile kurtarılan öğeler,
işlem yapılır. Örnek:
- Stil özellikleri ayarlanmış metin kaynağınızı HTML çıkışlı dize olarak depolayın:
<resources> <string name="welcome_messages">Hello, %1$s! You have <b>%2$d new messages</b>.</string> </resources>
.Bu biçimlendirilmiş dizeye bir
<b>
öğesi eklenir. Açılış parantezinin<
gösterimini kullanarak HTML çıkış karakterli. - Daha sonra dizeyi her zamanki gibi biçimlendirin ama aynı zamanda
fromHtml(String)
HTML metnini stil özellikli metne dönüştürün:Kotlin
val text: String = getString(R.string.welcome_messages, username, mailCount) val styledText: Spanned = Html.fromHtml(text, FROM_HTML_MODE_LEGACY)
Java
String text = getString(R.string.welcome_messages, username, mailCount); Spanned styledText = Html.fromHtml(text, FROM_HTML_MODE_LEGACY);
fromHtml(String)
yöntemi tüm HTML varlıklarını biçimlendirdiği için
biçimlendirilmiş metinle kullandığınız dizelerde olası HTML karakterlerini kod dışına almak için
htmlEncode(String)
. Örneğin,
"<" veya "&" içeriyorsa bunlar biçimlendirmeden önce kod dışına alınmalıdır. Böylece, biçimlendirilmiş dize
fromHtml(String)
üzerinden geçildiğinde, karakterler eskileri gibi çıkıyor
yazarlar. Örnek:
Kotlin
val escapedUsername: String = TextUtils.htmlEncode
(username)
val text: String = getString(R.string.welcome_messages, escapedUsername, mailCount)
val styledText: Spanned = Html.fromHtml(text, FROM_HTML_MODE_LEGACY)
Java
String escapedUsername = TextUtils.htmlEncode
(username);
String text = getString(R.string.welcome_messages, escapedUsername, mailCount);
Spanned styledText = Html.fromHtml(text);
Spanable'larla stil belirleme
Spannable
, stilini belirleyebileceğiniz bir metin nesnesidir
renk ve yazı tipi genişliği gibi yazı karakteri
özellikleri hakkında bilgi edindiniz. Kullandığınız
Derlemek için SpannableStringBuilder
metninize ekleyebilirsiniz ve ardından android.text.style
paketine ekler.
İşin büyük bir kısmını ayarlamak için aşağıdaki yardımcı yöntemleri kullanabilirsiniz bir örnek:
Kotlin
/** * Returns a CharSequence that concatenates the specified array of CharSequence * objects and then applies a list of zero or more tags to the entire range. * * @param content an array of character sequences to apply a style to * @param tags the styled span objects to apply to the content * such as android.text.style.StyleSpan */ private fun apply(content: Array<out CharSequence>, vararg tags: Any): CharSequence { return SpannableStringBuilder().apply { openTags(tags) content.forEach { charSequence -> append(charSequence) } closeTags(tags) } } /** * Iterates over an array of tags and applies them to the beginning of the specified * Spannable object so that future text appended to the text will have the styling * applied to it. Do not call this method directly. */ private fun Spannable.openTags(tags: Array<out Any>) { tags.forEach { tag -> setSpan(tag, 0, 0, Spannable.SPAN_MARK_MARK) } } /** * "Closes" the specified tags on a Spannable by updating the spans to be * endpoint-exclusive so that future text appended to the end will not take * on the same styling. Do not call this method directly. */ private fun Spannable.closeTags(tags: Array<out Any>) { tags.forEach { tag -> if (length > 0) { setSpan(tag, 0, length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) } else { removeSpan(tag) } } }
Java
/** * Returns a CharSequence that concatenates the specified array of CharSequence * objects and then applies a list of zero or more tags to the entire range. * * @param content an array of character sequences to apply a style to * @param tags the styled span objects to apply to the content * such as android.text.style.StyleSpan * */ private static CharSequence applyStyles(CharSequence[] content, Object[] tags) { SpannableStringBuilder text = new SpannableStringBuilder(); openTags(text, tags); for (CharSequence item : content) { text.append(item); } closeTags(text, tags); return text; } /** * Iterates over an array of tags and applies them to the beginning of the specified * Spannable object so that future text appended to the text will have the styling * applied to it. Do not call this method directly. */ private static void openTags(Spannable text, Object[] tags) { for (Object tag : tags) { text.setSpan(tag, 0, 0, Spannable.SPAN_MARK_MARK); } } /** * "Closes" the specified tags on a Spannable by updating the spans to be * endpoint-exclusive so that future text appended to the end will not take * on the same styling. Do not call this method directly. */ private static void closeTags(Spannable text, Object[] tags) { int len = text.length(); for (Object tag : tags) { if (len > 0) { text.setSpan(tag, 0, len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } else { text.removeSpan(tag); } } }
Takip eden bold
, italic
ve color
Yöntemleri, yukarıdaki yardımcı yöntemleri sarmalar ve uygulama ile ilgili spesifik örnekleri gösterir
stil android.text.style
paketinde tanımlandı. Siz
diğer metin biçimlendirme türleri için benzer yöntemler oluşturabilir.
Kotlin
/** * Returns a CharSequence that applies boldface to the concatenation * of the specified CharSequence objects. */ fun bold(vararg content: CharSequence): CharSequence = apply(content, StyleSpan(Typeface.BOLD)) /** * Returns a CharSequence that applies italics to the concatenation * of the specified CharSequence objects. */ fun italic(vararg content: CharSequence): CharSequence = apply(content, StyleSpan(Typeface.ITALIC)) /** * Returns a CharSequence that applies a foreground color to the * concatenation of the specified CharSequence objects. */ fun color(color: Int, vararg content: CharSequence): CharSequence = apply(content, ForegroundColorSpan(color))
Java
/** * Returns a CharSequence that applies boldface to the concatenation * of the specified CharSequence objects. */ public static CharSequence bold(CharSequence... content) { return apply(content, new StyleSpan(Typeface.BOLD)); } /** * Returns a CharSequence that applies italics to the concatenation * of the specified CharSequence objects. */ public static CharSequence italic(CharSequence... content) { return apply(content, new StyleSpan(Typeface.ITALIC)); } /** * Returns a CharSequence that applies a foreground color to the * concatenation of the specified CharSequence objects. */ public static CharSequence color(int color, CharSequence... content) { return apply(content, new ForegroundColorSpan(color)); }
Aşağıda, her bir reklam grubuna çeşitli stiller uygulamak için bu yöntemlerin nasıl zincir bir kelime öbeği içindeki kelimeler:
Kotlin
// Create an italic "hello, " a red "world", // and bold the entire sequence. val text: CharSequence = bold(italic(getString(R.string.hello)), color(Color.RED, getString(R.string.world)))
Java
// Create an italic "hello, " a red "world", // and bold the entire sequence. CharSequence text = bold(italic(getString(R.string.hello)), color(Color.RED, getString(R.string.world)));
core-ktx Kotlin modülü, aralıklarla çalışmayı daha da kolaylaştıran uzantı işlevleri de içerir. daha kolay olur. Web sitemiz g.co/newsinitiative/labs üzerinden Daha fazla bilgi edinmek için GitHub'daki android.text paketi dokümanlarına göz atın.
Aralıklarla çalışma hakkında daha fazla bilgi için aşağıdaki bağlantılara bakın:
Ek açıklamalarla stil belirleme
Şunlarla birlikte Annotation
sınıfını kullanarak karmaşık veya özel stil uygulayabilirsiniz:
string.xml kaynak dosyalarınızda <annotation>
etiketi. Ek açıklama etiketi,
XML'de özel anahtar/değer çiftleri tanımlayarak dizenin bölümlerini özel stil için işaretlemenize olanak tanır
daha sonra çerçevenin Annotation
aralıklarına dönüştüğünü gösterir. Daha sonra bu görevleri
anahtarı ve değeri kullanarak stili uygulayabilirsiniz.
Ek açıklama oluştururken <annotation>
eklediğinizden emin olun
etiketini her string.xml dosyasındaki dizenin tüm çevirilerine ekler.
Tüm dillerde "metin" kelimesine özel bir yazı tipi uygulama
Örnek - özel yazı tipi ekleme
-
<annotation>
etiketini ekleyin ve anahtar/değer çiftini tanımlayın. Bu durumda, anahtarı font ve değer de kullanmak istediğimiz yazı tipinin türüdür: title_emphasis// values/strings.xml <string name="title">Best practices for <annotation font="title_emphasis">text</annotation> on Android</string> // values-es/strings.xml <string name="title"><annotation font="title_emphasis">Texto</annotation> en Android: mejores prácticas</string>
-
Dize kaynağını yükleyin ve font anahtarıyla ek açıklamaları bulun. Daha sonra, yeni bir özel aralığı kullanın ve mevcut kapsamı değiştirin.
Kotlin
// get the text as SpannedString so we can get the spans attached to the text val titleText = getText(R.string.title) as SpannedString // get all the annotation spans from the text val annotations = titleText.getSpans(0, titleText.length, Annotation::class.java) // create a copy of the title text as a SpannableString. // the constructor copies both the text and the spans. so we can add and remove spans val spannableString = SpannableString(titleText) // iterate through all the annotation spans for (annotation in annotations) { // look for the span with the key font if (annotation.key == "font") { val fontName = annotation.value // check the value associated to the annotation key if (fontName == "title_emphasis") { // create the typeface val typeface = getFontCompat(R.font.permanent_marker) // set the span at the same indices as the annotation spannableString.setSpan(CustomTypefaceSpan(typeface), titleText.getSpanStart(annotation), titleText.getSpanEnd(annotation), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) } } } // now, the spannableString contains both the annotation spans and the CustomTypefaceSpan styledText.text = spannableString
Java
// get the text as SpannedString so we can get the spans attached to the text SpannedString titleText = (SpannedString) getText(R.string.title); // get all the annotation spans from the text Annotation[] annotations = titleText.getSpans(0, titleText.length(), Annotation.class); // create a copy of the title text as a SpannableString. // the constructor copies both the text and the spans. so we can add and remove spans SpannableString spannableString = new SpannableString(titleText); // iterate through all the annotation spans for (Annotation annotation: annotations) { // look for the span with the key font if (annotation.getKey().equals("font")) { String fontName = annotation.getValue(); // check the value associated to the annotation key if (fontName.equals("title_emphasis")) { // create the typeface Typeface typeface = ResourcesCompat.getFont(this, R.font.roboto_mono); // set the span at the same indices as the annotation spannableString.setSpan(new CustomTypefaceSpan(typeface), titleText.getSpanStart(annotation), titleText.getSpanEnd(annotation), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } } // now, the spannableString contains both the annotation spans and the CustomTypefaceSpan styledText.text = spannableString;
Aynı metni birden çok kez kullanıyorsanız SpannableString nesnesini bir kez kullanıp olası performansı ve belleği önlemek için gerektiğinde yeniden kullanın sorunları.
Ek açıklama kullanımıyla ilgili daha fazla örnek için bkz. Android'de uluslararası metinlere stil ekleme
Ek açıklama aralıkları ve metin ayrıştırma
Annotation
aralıkları da ParcelableSpans
olduğundan anahtar/değer çifti
çiftler ayrıştırılır ve ayrıştırılmaz. Kargonun alıcısı nasıl yorumlanacağını bildiği sürece
ek açıklamalara özel stil uygulamak için Annotation
kapsamlarını kullanabilirsiniz
ayrıştırılmış metin.
Metni bir Intent Bundle'a ilettiğinizde özel stilinizi korumak için öncelikle
Annotation
, metninizi kapsar. Bunu XML kaynaklarında
<not> etiketine (yukarıdaki örnekte gösterildiği gibi) veya yeni bir
Annotation
ve aşağıda gösterildiği gibi bir aralık olarak ayarlamak için:
Kotlin
val spannableString = SpannableString("My spantastic text") val annotation = Annotation("font", "title_emphasis") spannableString.setSpan(annotation, 3, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) // start Activity with text with spans val intent = Intent(this, MainActivity::class.java) intent.putExtra(TEXT_EXTRA, spannableString) startActivity(intent)
Java
SpannableString spannableString = new SpannableString("My spantastic text"); Annotation annotation = new Annotation("font", "title_emphasis"); spannableString.setSpan(annotation, 3, 7, 33); // start Activity with text with spans Intent intent = new Intent(this, MainActivity.class); intent.putExtra(TEXT_EXTRA, spannableString); this.startActivity(intent);
Bundle
kaynağından metni SpannableString
olarak al ve sonra ayrıştır
Yukarıdaki örnekte gösterildiği gibi, ekli ek açıklamalar.
Kotlin
// read text with Spans val intentCharSequence = intent.getCharSequenceExtra(TEXT_EXTRA) as SpannableString
Java
// read text with Spans SpannableString intentCharSequence = (SpannableString)intent.getCharSequenceExtra(TEXT_EXTRA);
Metin biçimlendirme hakkında daha fazla bilgi için aşağıdaki bağlantılara bakın: