To działa świetnie. Możesz dodać to do xml lub w kodzie java. Działa dobrze w kodzie java, w xml nie testowałem za dużo, ale powinno wystarczyć.
Mikooos
Ani \ u0020, ani \ u00A0 nie działają. Ani przez ustawienie ich w XML (nawet w podglądzie w XML), ani przez ustawienie ich w Javie za pomocą setText (). Próbowałem zarówno z Androidem 4.1, jak i 4.2
Stephan Wiesner,
1
To nie działa w połączeniu z przecinkiem. W takich przypadkach po przecinku pojawia się znak końca wiersza
Alex Bonel
1
\ u00A0 mi nie wystarcza. Nie tworzy spacji, po prostu łączy słowa - Android 4.4.4, 5.0, 5.1
Marcel Bro
1
W Kotlinie działa bardzo dobrze. Zastępuję wszystkie puste miejsca tym, a to elipsa od ostatnich znaków. str.replace („”, „\ u00A0”) zwraca „Hello wor ...” zamiast „Hello ...”
Seop Yoon
24
\u00A0jest spacją nierozdzielającą, \u0020nie jest spacją nierozdzielającą
Możliwe jest użycie czytelnego rozwiązania. Łącznie \u00A0lub  lub  /  w tekst nie naprawdę przekazać wiele informacji do czytnika kodu źródłowego (lub tłumacza dla tej sprawy), chyba pamiętacie kody HEX. Oto sposób użycia nazwanej jednostki w strings.xml:
Spowoduje to utworzenie brakującej deklaracji. Oryginalną deklarację HTML można znaleźć w https://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent, do którego odwołuje się zwykłe DTD XHTML . Wszystko to działa, ponieważ parser XML odczytuje je i zastępuje podczas ładowania pliku, więc jednostka nie będzie obecna w wynikowych skompilowanych zasobach.
w CharSequencezasobach Android Text ( )
<!-- Defined in <resources> --><stringname="html_text">Don\'t break <b>this name</b></string><!-- Used in a layout --><TextViewandroid:layout_width="130dp"android:layout_height="wrap_content"android:background="#10000000"android:text="@string/html_text"/>
Urządzenie i podgląd (podgląd nie rozpoznaje HTML)
w zasobach Android String (sformatowane)
<!-- Defined in <resources> --><stringname="formatted_text">%1$s is nice</string><!-- Used in a layout --><TextViewandroid:layout_width="130dp"android:layout_height="wrap_content"android:background="#10000000"tools:text="@string/formatted_text"/>
Następnie w kodzie:
String contents = getString(R.string.formatted_text,"Using an ");((TextView)view.findViewById(android.R.id.text1)).setText(contents);
Urządzenie i podgląd (wersja zapoznawcza nie rozpoznaje jednostek, a ciągi Java to dosłowny tekst!)
Dalsze sztuczki
To tylko przykładowe zastosowania jednostek DTD, używaj ich na podstawie własnych preferencji.
<!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 --><stringname="original">Don\'t wrap %1$s</string><stringname="with_entities">Don&con;t wrap ¶m1;</string>
Android dobrze radzi sobie z ’postacią, nie ma potrzeby tworzenia apostrofów. <string name="original">Don’t wrap %1$s</string>działa zgodnie z oczekiwaniami.
Diti,
1
@Diti To nie jest APOSTROFA , to PRAWIDŁOWY POJEDYNCZY ZNAK CYTATU ; porównać 'VS ’. Android nie ma problemów z bardziej wymyślnymi znakami Unicode, ale ma problem z ASCII 0x27, który wymaga ucieczki. Istota jest tylko wygodą, po prostu umieściłem ją tam, aby pokazać, gdzie może być przydatna.
TWiStErRob
To jest doskonałe =) Dziękuję. Uważam, że jest to o wiele czystsze i łatwiejsze do odczytania.
Alex Hart
Świetna odpowiedź, dziękuję! Zgadzam się, że posiadanie w smyczkach jest dla tłumaczy o wiele bardziej znaczące niż unicode\u00A0
Marc Attinasi,
1
@ Siedem oczywiście, zobacz ostatnią sekcję (Dalsze triki), która dodaje coni param1w tym samym pliku.
TWiStErRob
18
TextView powinien uwzględniać nierozdzielającą spację
\u00A0
jest spacją nierozdzielającą,\u0020
nie jest spacją nierozdzielającąźródło
Możliwe jest użycie
czytelnego rozwiązania. Łącznie\u00A0
lub 
lub 
/ 
w tekst nie naprawdę przekazać wiele informacji do czytnika kodu źródłowego (lub tłumacza dla tej sprawy), chyba pamiętacie kody HEX. Oto sposób użycia nazwanej jednostki wstrings.xml
:Spowoduje to utworzenie brakującej deklaracji. Oryginalną deklarację HTML można znaleźć w https://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent, do którego odwołuje się zwykłe DTD XHTML . Wszystko to działa, ponieważ parser XML odczytuje je i zastępuje podczas ładowania pliku, więc jednostka nie będzie obecna w wynikowych skompilowanych zasobach.
wCharSequence
zasobach Android Text ( )Urządzenie i podgląd (podgląd nie rozpoznaje HTML)
w zasobach Android String (sformatowane)Następnie w kodzie:
Urządzenie i podgląd (wersja zapoznawcza nie rozpoznaje jednostek, a ciągi Java to dosłowny tekst!)
Dalsze sztuczki
To tylko przykładowe zastosowania jednostek DTD, używaj ich na podstawie własnych preferencji.
Oba pomagają podkreślić:
źródło
’
postacią, nie ma potrzeby tworzenia apostrofów.<string name="original">Don’t wrap %1$s</string>
działa zgodnie z oczekiwaniami.'
VS’
. Android nie ma problemów z bardziej wymyślnymi znakami Unicode, ale ma problem z ASCII 0x27, który wymaga ucieczki. Istota jest tylko wygodą, po prostu umieściłem ją tam, aby pokazać, gdzie może być przydatna.
w smyczkach jest dla tłumaczy o wiele bardziej znaczące niż unicode\u00A0
con
iparam1
w tym samym pliku.TextView powinien uwzględniać nierozdzielającą spację
lub
źródło
Jedyną wyjątkową sytuacją, na którą się natknąłem, było dodanie nierozdzielającej spacji do zasobu ciągu, który pobierał
String.format
parametry.Próbowałem po prostu skopiować i wkleić nierozdzielający znak spacji do ciągu i został on zastąpiony zwykłą starą spacją po kompilacji.
Usunięcie formatted = "false" , numerowanie argumentów formatu i użycie notacji z odwrotnym ukośnikiem zadziałało dla mnie:
źródło
To zadziałało dla mnie:
źródło
To jest przykład użycia nbsp w TextView
<string name="text">Example:\u00A0</string>
źródło