我是否可以在Android中创建删除线文字,我的意思是在TextView
标记中添加一个可以实现此功能的特殊值?
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#040404"
android:typeface="sans"
android:textSize="12dip"
android:textStyle="bold"/>
答案 0 :(得分:271)
TextView someTextView = (TextView) findViewById(R.id.some_text_view);
someTextView.setText(someString);
someTextView.setPaintFlags(someTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
对于绘画文本,有几个用于执行操作的位标志 粗体,斜体,是删除线。所以要启用删除线, 你需要翻转与这个标志对应的位。最简单的 这样做的方法是使用按位或当前标志和a 常量,对应于只有一组标志 删除标志已启用。
答案 1 :(得分:21)
如果您使用字符串,这真的很容易:
<string name="line"> Not crossed <strike> crossed </strike> </string>
然后只是:
<TextView
...
android:text="@string/line"
/>
答案 2 :(得分:19)
试试这个:
richTextView = (TextView)findViewById(R.id.rich_text);
// this is the text we'll be operating on
SpannableString text = new SpannableString("Lorem ipsum dolor sit amet");
text.setSpan(new ForegroundColorSpan(Color.RED), 0, 5, 0);
// make "ipsum" (characters 6 to 11) one and a half time bigger than the textbox
text.setSpan(new RelativeSizeSpan(1.5f), 6, 11, 0);
// make "dolor" (characters 12 to 17) display a toast message when touched
final Context context = this;
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View view) {
Toast.makeText(context, "dolor", Toast.LENGTH_LONG).show();
}
};
text.setSpan(clickableSpan, 12, 17, 0);
// make "sit" (characters 18 to 21) struck through
text.setSpan(new StrikethroughSpan(), 18, 21, 0);
// make "amet" (characters 22 to 26) twice as big, green and a link to this site.
// it's important to set the color after the URLSpan or the standard
// link color will override it.
text.setSpan(new RelativeSizeSpan(2f), 22, 26, 0);
text.setSpan(new URLSpan("http://www.djsad.com"), 22, 26, 0);
text.setSpan(new ForegroundColorSpan(Color.GREEN), 22, 26, 0);
// make our ClickableSpans and URLSpans work
richTextView.setMovementMethod(LinkMovementMethod.getInstance());
// shove our styled text into the TextView
richTextView.setText(text, BufferType.SPANNABLE);
答案 3 :(得分:13)
我只是在复制我的answer。希望它对某人有所帮助 如果你只有一个单词,我们可以使用drawable。 以下是示例:
<item android:state_pressed="false"><shape android:shape="line">
<stroke android:width="2dp" android:color="#ffffff" />
</shape>
</item>
如果您有多行,则可以使用以下代码:
TextView someTextView = (TextView) findViewById(R.id.some_text_view);
someTextView.setText(someString);
someTextView.setPaintFlags(someTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG)
答案 4 :(得分:9)
您可以通过以下三种方式执行此操作:在TextView
中设置前景,或在PaintFlag
中设置<strike>your_string</strike>
或将字符串声明为strings.xml
。例如,
通过PaintFlag
这是最简单的方法,你只需要在TextView上设置删除线标志,
yourTextView.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
它会突破你的TextView。
通过前景可绘制
您还可以通过将前景设置为
来浏览TextView<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false">
<shape android:shape="line">
<stroke android:width="1dp" android:color="@android:color/holo_red_dark"/>
</shape>
</item>
</selector>
现在,您只需将TextView中的drawable设置为foreground
即可。例如,
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Your Textview with StrikeThrough"
android:foreground="@drawable/strikethrough_foreground" /> <!-- this is available above --!>
通过strings.xml
在此方法中,您必须将strings.xml
中的字符串声明为“穿透”,
<string name="strike_line"> <strike>This line is strike throughed</strike></string>
注意
但我建议你通过设置前景drawable来浏览TextView。因为通过drawable你可以很容易地通过线条颜色设置你的打击(就像我在上面的例子中设置为红色)或大小或任何其他样式属性。而在其他两种方法中,默认的textcolor是通过颜色进行的。
答案 5 :(得分:8)
如果您使用的是Kotlin:
your_text_view.apply {
paintFlags = paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
text = "Striked thru text"
}
答案 6 :(得分:6)
只需使用此功能即可完成。 对于活动:
TextView t= (TextView).findViewById(R.id.thousand));
t.setPaintFlags(t.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
对于Xml:
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_view_original_cash_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:textColor="@android:color/darker_gray"
android:text="Rs. 1,999"/>
<View
android:layout_width="wrap_content"
android:layout_height="1dp"
android:background="@android:color/darker_gray"
android:layout_centerVertical="true"
android:layout_alignStart="@id/text_view_original_cash_amount"
android:layout_alignEnd="@id/text_view_original_cash_amount"
android:layout_alignLeft="@id/text_view_original_cash_amount"
android:layout_alignRight="@id/text_view_original_cash_amount" />
</RelativeLayout>
答案 7 :(得分:3)
我上面尝试了几个选项,但这对我来说效果最好:
String text = "<strike><font color=\'#757575\'>Some text</font></strike>";
textview.setText(Html.fromHtml(text));
欢呼声
答案 8 :(得分:3)
在 kotlin 中:
要做:
textView.paintFlags= textView.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
撤销:
textView.paintFlags= textView.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
答案 9 :(得分:2)
在科特林中,您可以创建扩展程序属性:
inline var TextView.strike: Boolean
set(visible) {
paintFlags = if (visible) paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
else paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
}
get() = paintFlags and Paint.STRIKE_THRU_TEXT_FLAG == Paint.STRIKE_THRU_TEXT_FLAG
并使用:
textView.strike = true
答案 10 :(得分:1)
这非常适合数据绑定:
@BindingAdapter("strikethrough")
@JvmStatic
fun strikethrough(view: TextView, show: Boolean) {
view.paintFlags = if (show) {
view.paintFlags or STRIKE_THRU_TEXT_FLAG
} else {
view.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
}
}
然后在您的xml中输入
: <TextView
android:id="@+id/line_item_name"
android:textAppearance="?attr/textAppearanceBody2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Club sandwich with ranch dressing"
app:strikethrough="@{viewModel.isItemChecked}"/>
答案 11 :(得分:0)
在您可观察的视图模型中
fun getStrikeContent(): String {
return "Hello"
}
companion object {
@BindingAdapter("strike")
@JvmStatic
fun loadOldPrice(view: TextView, value: String) {
view.text = value
view.paintFlags = STRIKE_THRU_TEXT_FLAG
}
}
然后输入您的xml
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:strike="@{itemViewModel.strikeContent}" />