ฉันต้องการทำให้TextView
เนื้อหาเป็นตัวหนาตัวเอียงและขีดเส้นใต้ ฉันลองใช้รหัสต่อไปนี้และใช้งานได้ แต่ไม่ขีดเส้นใต้
<Textview android:textStyle="bold|italic" ..
ฉันต้องทำอย่างไร? มีไอเดียด่วน ๆ ไหม?
ฉันต้องการทำให้TextView
เนื้อหาเป็นตัวหนาตัวเอียงและขีดเส้นใต้ ฉันลองใช้รหัสต่อไปนี้และใช้งานได้ แต่ไม่ขีดเส้นใต้
<Textview android:textStyle="bold|italic" ..
ฉันต้องทำอย่างไร? มีไอเดียด่วน ๆ ไหม?
คำตอบ:
ผมไม่ทราบว่าเกี่ยวกับขีดเส้นใต้ "bolditalic"
แต่สำหรับตัวเอียงตัวหนาและมี ไม่มีการพูดถึงขีดเส้นใต้ที่นี่: http://developer.android.com/reference/android/widget/TextView.html#attr_android:textStyle
ทราบว่าจะใช้สิ่งที่กล่าวถึงที่bolditalic
คุณต้องการและฉันพูดจากหน้านั้น
ต้องเป็นหนึ่งค่าหรือมากกว่า (คั่นด้วย '|') ของค่าคงที่ต่อไปนี้
ดังนั้นคุณจะใช้ bold|italic
คุณสามารถตรวจสอบคำถามนี้สำหรับการขีดเส้นใต้: ฉันสามารถขีดเส้นใต้ข้อความในรูปแบบ android ได้หรือไม่?
textView.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
นี้จะทำให้ TextView ของคุณหนา , ขีดเส้นใต้และตัวเอียงในเวลาเดียวกัน
strings.xml
<resources>
<string name="register"><u><b><i>Copyright</i></b></u></string>
</resources>
ในการตั้งค่าสตริงนี้เป็น TextView ของคุณให้ทำสิ่งนี้ในmain.xmlของคุณ
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/register" />
หรือในJAVA ,
TextView textView = new TextView(this);
textView.setText(R.string.register);
บางครั้งวิธีการข้างต้นจะไม่เป็นประโยชน์เมื่อคุณอาจต้องใช้ข้อความแบบไดนามิก ดังนั้นในกรณีที่SpannableStringเข้ามาดำเนินการ
String tempString="Copyright";
TextView text=(TextView)findViewById(R.id.text);
SpannableString spanString = new SpannableString(tempString);
spanString.setSpan(new UnderlineSpan(), 0, spanString.length(), 0);
spanString.setSpan(new StyleSpan(Typeface.BOLD), 0, spanString.length(), 0);
spanString.setSpan(new StyleSpan(Typeface.ITALIC), 0, spanString.length(), 0);
text.setText(spanString);
เอาท์พุท
new StyleSpan(Typeface.BOLD_ITALIC)
หรือเช่นนี้ใน Kotlin:
val tv = findViewById(R.id.textViewOne) as TextView
tv.setTypeface(null, Typeface.BOLD_ITALIC)
// OR
tv.setTypeface(null, Typeface.BOLD or Typeface.ITALIC)
// OR
tv.setTypeface(null, Typeface.BOLD)
// OR
tv.setTypeface(null, Typeface.ITALIC)
// AND
tv.paintFlags = tv.paintFlags or Paint.UNDERLINE_TEXT_FLAG
หรือใน Java:
TextView tv = (TextView)findViewById(R.id.textViewOne);
tv.setTypeface(null, Typeface.BOLD_ITALIC);
// OR
tv.setTypeface(null, Typeface.BOLD|Typeface.ITALIC);
// OR
tv.setTypeface(null, Typeface.BOLD);
// OR
tv.setTypeface(null, Typeface.ITALIC);
// AND
tv.setPaintFlags(tv.getPaintFlags()|Paint.UNDERLINE_TEXT_FLAG);
ทำให้มันง่ายและอยู่ในบรรทัดเดียว :)
paintFlags
สิ่งที่จำเป็น? มันทำงานได้โดยไม่ต้องใช้อย่างนั้น
สำหรับตัวหนาและตัวเอียงสิ่งที่คุณกำลังทำถูกต้องสำหรับขีดล่างใช้รหัสต่อไปนี้
HelloAndroid.java
package com.example.helloandroid;
import android.app.Activity;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.style.UnderlineSpan;
import android.widget.TextView;
public class HelloAndroid extends Activity {
TextView textview;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textview = (TextView)findViewById(R.id.textview);
SpannableString content = new SpannableString(getText(R.string.hello));
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
textview.setText(content);
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/hello"
android:textStyle="bold|italic"/>
string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, HelloAndroid!</string>
<string name="app_name">Hello, Android</string>
</resources>
underline
ค่า Null ของรหัสผ่านแทนnew UnderlineSpan()
ดังต่อไปนี้ content.setSpan(null, 0, content.length(), 0);
นี่เป็นวิธีที่ง่ายในการเพิ่มการขีดเส้นใต้ในขณะที่รักษาการตั้งค่าอื่น ๆ :
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Programmatialy:
คุณสามารถเขียนโปรแกรมโดยใช้เมธอด setTypeface ():
ด้านล่างเป็นรหัสสำหรับแบบอักษรเริ่มต้น
textView.setTypeface(null, Typeface.NORMAL); // for Normal Text
textView.setTypeface(null, Typeface.BOLD); // for Bold only
textView.setTypeface(null, Typeface.ITALIC); // for Italic
textView.setTypeface(null, Typeface.BOLD_ITALIC); // for Bold and Italic
และถ้าคุณต้องการที่จะตั้งค่าแบบอักษรที่กำหนดเอง:
textView.setTypeface(textView.getTypeface(), Typeface.NORMAL); // for Normal Text
textView.setTypeface(textView.getTypeface(), Typeface.BOLD); // for Bold only
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC); // for Italic
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC); // for Bold and Italic
XML:
คุณสามารถตั้งค่าโดยตรงในไฟล์ XML ในลักษณะ:
android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"
หากคุณกำลังอ่านข้อความนั้นจากไฟล์หรือจากเครือข่าย
คุณสามารถทำได้โดยการเพิ่มแท็ก HTML ให้กับข้อความของคุณตามที่กล่าวไว้
This text is <i>italic</i> and <b>bold</b>
and <u>underlined</u> <b><i><u>bolditalicunderlined</u></b></i>
จากนั้นคุณสามารถใช้คลาสHTMLที่ประมวลผลสตริง HTML เป็นข้อความสไตล์ที่แสดงได้
// textString is the String after you retrieve it from the file
textView.setText(Html.fromHtml(textString));
ไม่มีคำพูดเหมาะสำหรับฉัน:
<item name="android:textStyle">bold|italic</item>
style="?android:attr/listSeparatorTextViewStyle
เพียงหนึ่งบรรทัดของโค้ดใน xml
android:textStyle="italic"
คุณสามารถทำให้สำเร็จได้อย่างง่ายดายโดยใช้ Kotlin buildSpannedString{}
ภายใต้การcore-ktx
พึ่งพา
val formattedString = buildSpannedString {
append("Regular")
bold { append("Bold") }
italic { append("Italic") }
underline { append("Underline") }
bold { italic {append("Bold Italic")} }
}
textView.text = formattedString