Android और & nbsp; पाठ दृश्य में


108

क्या  TextView में जोड़ना संभव है ? क्या किसी ने समान कार्यक्षमता हासिल की है?

मैं TextView में गैर-विराम योग्य स्थान रखना चाहता हूं।

जवाबों:


184

TextViewयूनिकोड नो-ब्रेक स्पेस कैरेक्टर ( \u00A0) का सम्मान करता है , जो HTML की तुलना में सरल / हल्का समाधान होगा।


3
यह बहुत अच्छा काम करता है। आप इसे xml या जावा कोड में जोड़ सकते हैं। जावा कोड में कार्य ठीक है, xml में मैंने बहुत परीक्षण नहीं किया है, लेकिन यह काम करना चाहिए।
मिकुओस

न तो \ u0020 और न ही \ u00A0 काम करते हैं। न तो उन्हें XML में सेट करके (XML में पूर्वावलोकन में भी नहीं) और न ही जावा में setText () के साथ सेट करके। Android 4.1 और 4.2
Stephan Wiesner

1
यह अल्पविराम के साथ मिलकर काम नहीं करता है। आपको ऐसे मामलों में अल्पविराम के बाद एक लाइन ब्रेक मिलता है
एलेक्स बोनल

1
\ u00A0 मेरे लिए चाल नहीं करता है। यह एक जगह नहीं बनाता है, बस शब्दों में शामिल होता है - एंड्रॉइड 4.4.4, 5.0, 5.1
मार्सेल ब्रो

1
कोटलिन में, यह बहुत अच्छी तरह से काम करता है। मैं इसके साथ सभी खाली स्थानों को प्रतिस्थापित करता हूं, और यह अंतिम पात्रों से ग्रहण करेगा। str.replace ( "", "\ u00A0") पैदावार, "नमस्ते wor ..." के बदले "हैलो ..."
SEOP यून

24

\u00A0एक गैर-ब्रेकिंग स्पेस है, \u0020एक गैर-ब्रेकिंग स्पेस नहीं है


24

 पठनीय समाधान का उपयोग करना संभव है । पाठ में शामिल \u00A0या /  या वास्तव में स्रोत कोड (या उस मामले के लिए अनुवादक) के पाठक को बहुत जानकारी नहीं देता है, जब तक कि आपको हेक्स कोड याद न हों। यहां नामित इकाई का उपयोग करने का एक तरीका है :  strings.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
    <!ENTITY nbsp "&#160;"><!-- non-breaking space, U+00A0 -->
]>
<resources>
    ...
</resources>

यह लापता घोषणा को बनाएगा। मूल HTML घोषणा को https://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent सामान्य XHTML DTDs से संदर्भित किया जा सकता है। । यह सब काम करता है, क्योंकि फ़ाइल को लोड करते समय XML पार्सर इन और विकल्प को पढ़ता है, इसलिए इकाई परिणामी संकलित संसाधनों में मौजूद नहीं होगी।

&nbsp;Android पाठ में ( CharSequence) संसाधन

<!-- 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"
    />

डिवाइस और पूर्वावलोकन (पूर्वावलोकन HTML को नहीं पहचानता है)
डिवाइस पर HTML पूर्वावलोकन में HTML

&nbsp; Android स्ट्रिंग (स्वरूपित) संसाधन में

<!-- 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"
    />

फिर कोड में:

String contents = getString(R.string.formatted_text, "Using an &nbsp;");
((TextView)view.findViewById(android.R.id.text1)).setText(contents);

डिवाइस और पूर्वावलोकन (पूर्वावलोकन पहचान नहीं करता है और जावा तार शाब्दिक पाठ हैं!)
डिवाइस पर स्वरूपित पूर्वावलोकन में स्वरूपित

आगे के टोटके

ये डीटीडी संस्थाओं का सिर्फ उदाहरण उपयोग हैं, इसे अपनी पसंद के आधार पर उपयोग करें।

<!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>

उन दोनों को उजागर करने में मदद करते हैं: XML संस्थाओं पर प्रकाश डाला


एंड्रॉइड चरित्र को ठीक से संभालता है, एपोस्ट्रोफिक संस्थाओं को बनाने की कोई आवश्यकता नहीं है। <string name="original">Don’t wrap %1$s</string>उम्मीद के मुताबिक काम करता है।
दिति

1
@Diti यह एक APOSTROPHE नहीं है , यह एक बहुत बड़ा उद्धरण मार्क है ; तुलना 'वी.एस. । एंड्रॉइड को अधिक फैंसी यूनिकोड वर्णों के साथ कोई समस्या नहीं है, लेकिन इसमें ASCII 0x27 के साथ एक समस्या है, जिसे भागने की आवश्यकता है। इकाई केवल एक सुविधा है, मैंने इसे वहां प्रदर्शित करने के लिए रखा जहां यह उपयोगी हो सकता है।
ट्वीस्टरेब जुब

यह उत्कृष्ट है =) धन्यवाद। मुझे यह बहुत साफ लगता है और पढ़ने में आसान है।
एलेक्स हार्ट

शानदार जवाब, धन्यवाद! मैं मानता हूँ कि &nbsp;स्ट्रिंग्स में होना यूनिकोड की तुलना में अनुवादकों के लिए अधिक अर्थपूर्ण है\u00A0
मार्क एटिनासी

1
@ निश्चित रूप से, अंतिम खंड (आगे की ट्रिक) देखें जो जोड़ता है conऔर param1उसी फ़ाइल में।
TWStStrrob

18

TextView को नॉन ब्रेकिंग स्पेस का सम्मान करना चाहिए

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

या

new TextView("Hello\u00A0world");

3

एक अनोखी स्थिति जो मैं भाग रहा था, वह एक गैर-ब्रेकिंग स्पेस को एक स्ट्रिंग संसाधन में जोड़ रहा था जो String.formatमापदंडों को ले गया था ।

<resources>
    <string name="answer_progress" formatted="false">Answered %d of %d</string>
</resources>

मैंने स्ट्रिंग में नॉन-ब्रेकिंग स्पेस चरित्र को बस कॉपी और पेस्ट करने की कोशिश की और इसे संकलन के बाद एक नियमित पुराने स्थान से बदल दिया गया।

निकाला जा रहा है स्वरूपित = "false" , प्रारूप आर्ग नंबर और का उपयोग कर बैकस्लैश अंकन मेरे लिए काम किया:

<resources>
    <string name="answer_progress">Answered %1$d\u00A0of\u00A0%2$d</string>
</resources>

2

यह मेरे लिए काम किया:

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

यह एक उदाहरण है जो एक TextView में nbsp का उपयोग करता है

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


4
वह
poitroae
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.