2011-07-03 25 views
74

में टेक्स्ट व्यू में   जोड़ना संभव है? क्या किसी ने समान कार्यक्षमता हासिल की है?एंड्रॉइड और   टेक्स्ट व्यू

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

उत्तर

137

मैं इस की कोशिश की है नहीं सुनिश्चित करने के लिए कि यह वास्तव में काम करता है, लेकिन एक आदर्श दुनिया में TextViewUnicode no-break space character (\u00A0) का सम्मान करना चाहिए, जो HTML की तुलना में एक सरल/लाइटर समाधान होगा।

+3

कि महान काम करता है। आप इसे एक्सएमएल या जावा कोड में जोड़ सकते हैं। जावा कोड में ठीक काम करें, एक्सएमएल में मैंने बहुत ज्यादा परीक्षण नहीं किया है, लेकिन इसे नौकरी करना चाहिए। – Mikooos

+0

न तो \ u0020 और न ही \ u00A0 काम। न तो उन्हें एक्सएमएल में सेट करके (एक्सएमएल में पूर्वावलोकन में भी नहीं) और न ही उन्हें जावा में setText() के साथ सेट करके। एंड्रॉइड 4.1 और 4.2 –

+0

\ u00A0 दोनों ने एंड्रॉइड 4.4 के साथ एंड्रॉइड 4.4 के साथ स्ट्रिंग्स.एक्सएमएल – OneWorld

0

यह एक उदाहरण है कि एक TextView

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

+4

के बजाय "हैलो wor ..." उत्पन्न होता है यह \ u00A0 – poitroae

16

\u00A0 में nbsp का उपयोग कर एक नॉन-ब्रेकिंग स्पेस है, \u0020 एक नॉन-ब्रेकिंग स्पेस

14

TextView गैर तोड़ने का सम्मान करना चाहिए नहीं है अंतरिक्ष

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

या

new TextView("Hello\u00A0world"); 
1

एक अनूठी स्थिति जिसमें मैंने भाग लिया था, एक स्ट्रिंग संसाधन में एक गैर-ब्रेकिंग स्पेस जोड़ रहा था जिसमें 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> 
10

यह &nbsp; उपयोग करने के लिए एक पठनीय समाधान होना संभव नहीं है। पाठ में \u00A0 या &#160; या &#xa0;/&#x00a0; सहित वास्तव में स्रोत कोड (या उस मामले के लिए अनुवादक) के पाठक को अधिक जानकारी नहीं दी जाती है, जब तक आपको हेक्स कोड याद न हों। यहाँ strings.xml में वर्णित निकाय को उपयोग करने के लिए एक तरीका है:

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

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

एंड्रॉयड पाठ में &nbsp; (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 on device HTML in preview

एंड्रॉयड स्ट्रिंग में &nbsp; (प्रारूपित) संसाधन

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

डिवाइस और पूर्वावलोकन (! पूर्वावलोकन संस्थाओं को मान्यता नहीं देता और जावा तार शाब्दिक पाठ कर रहे हैं)
formatted on device formatted in preview

आगे चाल

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

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

उन दोनों पर प्रकाश डाला मदद: highlighted XML entities

+0

होना चाहिए एंड्रॉइड '' 'चरित्र को ठीक से संभालता है, बनाने की कोई ज़रूरत नहीं है apostrophe इकाइयों। '% 1 $ s 'अपेक्षित कार्य को लपेटें मत। – Diti

+1

@Diti यह एक [APOSTROPEE] नहीं है (http://www.fileformat.info/info/unicode/char/0027/index.htm), यह एक [दायां सिंगल कोटेशन मार्क] है (http: //www.fileformat। जानकारी/जानकारी/यूनिकोड/चार/2019/index.htm); ''' VS '' की तुलना करें। एंड्रॉइड में अधिक फैंसी यूनिकोड वर्णों के साथ कोई समस्या नहीं है, लेकिन इसमें ASCII 0x27 के साथ कोई समस्या है, जिसे भागने की आवश्यकता है। इकाई सिर्फ एक सुविधा है, मैंने इसे यह दिखाने के लिए वहां रखा है कि यह कहां उपयोगी हो सकता है। – TWiStErRob

+0

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

0

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

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); 
} 
संबंधित मुद्दे