Android ve & nbsp; TextView'da


109

 TextView'a eklemek mümkün mü? Benzer işlevselliğe sahip olan var mı?

TextView'da bölünemez alana sahip olmak istiyorum.

Yanıtlar:


185

TextViewHTML'den daha basit / daha hafif bir çözüm olan Unicode bölünmez boşluk karakterine ( \u00A0) saygı duyar .


3
Bu harika çalışıyor. Bunu xml'ye veya java koduna ekleyebilirsiniz. Java kodunda iyi çalışın, xml'de çok test etmedim, ancak işi yapmalı.
Mikooos

Ne \ u0020 ne de \ u00A0 çalışmıyor. Ne onları XML'de ayarlayarak (XML'deki önizlemede bile) ne de setText () ile Java'da ayarlayarak. Her ikisini de Android 4.1 ve 4.2 ile denedim
Stephan Wiesner

1
Bu virgülle birlikte çalışmaz. Bu gibi durumlarda virgülden hemen sonra bir satır sonu alırsınız
Alex Bonel

1
\ u00A0 benim için hile yapmıyor. Yer açmaz, sadece kelimeleri birleştirir - Android 4.4.4, 5.0, 5.1
Marcel Bro

1
Kotlin'de çok iyi çalışıyor. Tüm boş boşlukları bununla değiştiriyorum ve son karakterlerden elips olacak. str.replace ("", "\ u00A0"), "Merhaba ..." yerine "Merhaba wor ..."
sonucunu verir

24

\u00A0bölünemez bir boşluktur, bölünemez bir boşluk \u0020değildir


24

 Okunabilir bir çözüme sahip olmak mümkündür . Onaltılık kodları hatırlamadığınız sürece, metne dahil \u00A0veya /  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 "&#160;"><!-- 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.

&nbsp;Android Metin ( CharSequence) Kaynaklarında

<!-- Defined in <resources> -->
<string name="html_text">Don\'t break <b>this&nbsp;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)
Cihazda HTML Önizlemede HTML

&nbsp; Android String (formatlanmış) Kaynaklarında

<!-- Defined in <resources> -->
<string name="formatted_text">%1$s is&nbsp;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 &nbsp;");
((TextView)view.findViewById(android.R.id.text1)).setText(contents);

Cihaz ve önizleme (önizleme varlıkları tanımaz ve Java dizeleri değişmez metindir!)
cihazda biçimlendirilmiş önizlemede biçimlendirildi

Diğer püf noktaları

Bunlar, DTD varlıklarının yalnızca örnek kullanımlarıdır, kendi tercihinize göre kullanın.

<!ENTITY con "\&apos;"><!-- contraction, otherwise error: "Apostrophe not preceded by \"
                            Sadly &apos; cannot be overridden due to XML spec:
                            https://www.w3.org/TR/xml/#sec-predefined-ent -->
<!ENTITY param1 "&#37;1$s"><!-- format string argument #1 -->

<string name="original">Don\'t wrap %1$s</string>
<string name="with_entities">Don&con;t wrap &param1;</string>

İkisi de şunları vurgulamaya yardımcı olur: vurgulanan XML varlıkları


Android 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.
Diti

1
@Diti Yani en değil IMI bir var, sağa eğik kesme işaretini ; '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.
TWiStErRob

Bu mükemmel =) Teşekkürler. Bunu çok daha temiz ve okunması daha kolay buluyorum.
Alex Hart

Harika cevap, teşekkürler! &nbsp;Dizelerde bulunmanın çevirmenler için unicode'dan çok daha anlamlı olduğuna katılıyorum\u00A0
Marc Attinasi

1
@Yedi elbette, aynı dosyada ekleyen conve ekleyen son bölüme (Diğer ipuçları) bakın param1.
TWiStErRob

18

TextView, bölünmeyen boşluğa saygı göstermelidir

<string name="test">Hello&#160;world</string>

veya

new TextView("Hello\u00A0world");

3

Karşılaştığım benzersiz bir durum, String.formatparametreleri 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>

2

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);
}

1

Bu, bir TextView içinde nbsp kullanan bir örnektir.

<string name="text">Example:\u00A0</string>


4
Bu \
u00A0
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.