Yanıtlar:
TextView
HTML'den daha basit / daha hafif bir çözüm olan Unicode bölünmez boşluk karakterine ( \u00A0
) saygı duyar .
\u00A0
bölünemez bir boşluktur, bölünemez bir boşluk \u0020
değildir
Okunabilir bir çözüme sahip olmak mümkündür . Onaltılık kodları hatırlamadığınız sürece, metne dahil \u00A0
veya /  
veya  
/ veya  
kaynak kod okuyucusuna (veya bu konuda çevirmene) çok fazla bilgi aktarmaz. Burada adlandırılmış varlığı kullanmanın bir yolu strings.xml
:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY nbsp " "><!-- non-breaking space, U+00A0 -->
]>
<resources>
...
</resources>
Bu, eksik beyanı yaratacaktır. Orijinal HTML bildirimi , her zamanki XHTML DTD'lerinden referans alınan https://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent adresinde bulunabilir . Tüm bunlar çalışır, çünkü XML ayrıştırıcı bunları okur ve dosyayı yüklerken değiştirir, böylece varlık sonuçta ortaya çıkan derlenmiş kaynaklarda mevcut olmaz.
Android Metin ( CharSequence
) Kaynaklarında<!-- Defined in <resources> -->
<string name="html_text">Don\'t break <b>this name</b></string>
<!-- Used in a layout -->
<TextView
android:layout_width="130dp"
android:layout_height="wrap_content"
android:background="#10000000"
android:text="@string/html_text"
/>
Cihaz ve önizleme (önizleme HTML'yi tanımıyor)
Android String (formatlanmış) Kaynaklarında<!-- Defined in <resources> -->
<string name="formatted_text">%1$s is nice</string>
<!-- Used in a layout -->
<TextView
android:layout_width="130dp"
android:layout_height="wrap_content"
android:background="#10000000"
tools:text="@string/formatted_text"
/>
Sonra kodda:
String contents = getString(R.string.formatted_text, "Using an ");
((TextView)view.findViewById(android.R.id.text1)).setText(contents);
Cihaz ve önizleme (önizleme varlıkları tanımaz ve Java dizeleri değişmez metindir!)
Bunlar, DTD varlıklarının yalnızca örnek kullanımlarıdır, kendi tercihinize göre kullanın.
<!ENTITY con "\'"><!-- contraction, otherwise error: "Apostrophe not preceded by \"
Sadly ' cannot be overridden due to XML spec:
https://www.w3.org/TR/xml/#sec-predefined-ent -->
<!ENTITY param1 "%1$s"><!-- format string argument #1 -->
<string name="original">Don\'t wrap %1$s</string>
<string name="with_entities">Don&con;t wrap ¶m1;</string>
’
karakteri gayet iyi işler, kesme işareti varlıkları oluşturmaya gerek yoktur. <string name="original">Don’t wrap %1$s</string>
beklendiği gibi çalışıyor.
'
VS ile karşılaştırın ’
. Android'in daha süslü Unicode karakterleriyle bir sorunu yok, ancak ASCII 0x27 ile kaçması gereken bir sorunu var. Varlık sadece bir kolaylık, sadece nerede yararlı olabileceğini göstermek için oraya koydum.
Dizelerde bulunmanın çevirmenler için unicode'dan çok daha anlamlı olduğuna katılıyorum\u00A0
con
ve ekleyen son bölüme (Diğer ipuçları) bakın param1
.
Karşılaştığım benzersiz bir durum, String.format
parametreleri alan bir dize kaynağına bölünmeyen bir boşluk eklemekti .
<resources>
<string name="answer_progress" formatted="false">Answered %d of %d</string>
</resources>
Bölünemez boşluk karakterini dizeye kopyalayıp yapıştırmaya çalıştım ve derlemeden sonra normal eski bir boşlukla değiştirildi.
Biçimlendirilmiş = "false" ifadesini kaldırmak, biçim değişkenlerini numaralandırmak ve ters eğik çizgiyi kullanmak benim için çalıştı:
<resources>
<string name="answer_progress">Answered %1$d\u00A0of\u00A0%2$d</string>
</resources>
Bu benim için çalıştı:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
textview.setText(Html.fromHtml(your string, Html.FROM_HTML_MODE_LEGACY));
} else {
textview.setText(Html.fromHtml(your string);
}