เป็นไปได้ไหมที่จะเพิ่ม
ใน TextView มีใครทำได้เหมือนกันบ้าง
ฉันต้องการมีพื้นที่ว่างที่ไม่แตกหักใน TextView
เป็นไปได้ไหมที่จะเพิ่ม
ใน TextView มีใครทำได้เหมือนกันบ้าง
ฉันต้องการมีพื้นที่ว่างที่ไม่แตกหักใน TextView
คำตอบ:
TextView
เคารพอักขระ Unicode no-break space ( \u00A0
) ซึ่งจะเป็นวิธีแก้ปัญหาที่ง่าย / เบากว่า HTML
\u00A0
เป็นพื้นที่ที่ไม่ทำลายไม่ใช่พื้นที่ที่\u0020
ไม่ทำลาย
เป็นไปได้ที่จะใช้
เพื่อให้มีโซลูชันที่อ่านได้ การรวม\u00A0
หรือ 
หรือ 
/  
ในข้อความไม่ได้ให้ข้อมูลมากนักกับผู้อ่านซอร์สโค้ด (หรือตัวแปลสำหรับเรื่องนั้น) เว้นแต่คุณจะจำรหัสฐานสิบหก นี่คือวิธีใช้เอนทิตีที่มีชื่อในstrings.xml
:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY nbsp " "><!-- non-breaking space, U+00A0 -->
]>
<resources>
...
</resources>
สิ่งนี้จะสร้างการประกาศที่ขาดหายไป การประกาศHTMLดั้งเดิมสามารถพบได้ในhttps://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent โดยอ้างอิงจากXHTML DTDsปกติDTDs ทั้งหมดนี้ใช้งานได้เนื่องจากตัวแยกวิเคราะห์ XML อ่านสิ่งเหล่านี้และแทนที่ในขณะที่โหลดไฟล์ดังนั้นเอนทิตีจะไม่ปรากฏในทรัพยากรที่คอมไพล์ผลลัพธ์
ในCharSequence
ทรัพยากรAndroid Text ( )<!-- 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"
/>
อุปกรณ์และตัวอย่าง (การแสดงตัวอย่างไม่รู้จัก HTML)
ในทรัพยากร Android String (จัดรูปแบบ)<!-- 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"
/>
จากนั้นในรหัส:
String contents = getString(R.string.formatted_text, "Using an ");
((TextView)view.findViewById(android.R.id.text1)).setText(contents);
อุปกรณ์และการแสดงตัวอย่าง (การแสดงตัวอย่างไม่รู้จักเอนทิตีและสตริง Java เป็นข้อความตามตัวอักษร!)
นี่เป็นเพียงตัวอย่างการใช้เอนทิตี DTD ใช้ตามความต้องการของคุณเอง
<!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>
’
อักขระได้ดีไม่จำเป็นต้องสร้างเอนทิตีเครื่องหมายอะพอสทรอฟี <string name="original">Don’t wrap %1$s</string>
ทำงานได้ตามที่คาดไว้
'
’
Android ไม่มีปัญหากับอักขระ Unicode ที่สวยงามมากขึ้น แต่มีปัญหากับ ASCII 0x27 ซึ่งจำเป็นต้องหลบหนี เอนทิตีเป็นเพียงสิ่งอำนวยความสะดวกฉันแค่วางไว้ที่นั่นเพื่อแสดงให้เห็นว่ามันมีประโยชน์ตรงไหน
สตริงมีความหมายต่อนักแปลมากกว่ายูนิโคด\u00A0
con
และparam1
ในไฟล์เดียวกัน
TextView ควรเคารพพื้นที่ที่ไม่ทำลาย
<string name="test">Hello world</string>
หรือ
new TextView("Hello\u00A0world");
สถานการณ์ที่ไม่เหมือนใครอย่างหนึ่งที่ฉันพบคือการเพิ่มพื้นที่ว่างให้กับทรัพยากรสตริงที่รับString.format
พารามิเตอร์
<resources>
<string name="answer_progress" formatted="false">Answered %d of %d</string>
</resources>
ฉันพยายามคัดลอกและวางอักขระช่องว่างที่ไม่ทำลายลงในสตริงและมันก็ถูกแทนที่ด้วยช่องว่างเก่าปกติหลังจากรวบรวม
การลบformatted = "false" การกำหนดหมายเลข args รูปแบบและการใช้เครื่องหมายแบ็กสแลชใช้ได้ผลสำหรับฉัน:
<resources>
<string name="answer_progress">Answered %1$d\u00A0of\u00A0%2$d</string>
</resources>
สิ่งนี้ใช้ได้ผลสำหรับฉัน:
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);
}
นี่คือตัวอย่างที่ใช้ nbsp ใน TextView
<string name="text">Example:\u00A0</string>