我为您定制了一款 android:background
属性。但是,我只想为textview的某一部分而不是整个textview绘制背景
迄今为止完成的工作:
目标:我想实现这样的目标(即只为 substring(1,2)
(正文):
我就是这样取得现在的成绩的:
上划线.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:bottom="-2dp"
android:left="-2dp"
android:right="-2dp"
android:top="1dp">
<shape android:shape="rectangle">
<stroke
android:width="1dp"
android:color="#030310" />
</shape>
</item>
</layer-list>
布局.xml
<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/overline"
android:textColor="#030310"
android:text="Hello"/>
以下是我迄今为止所做的尝试:
SpannableString ss = new SpannableString("Hello");
Drawable d = ContextCompat.getDrawable(((MainActivity) getActivity()).getApplicationContext(), R.drawable.overline);
d.setBounds(0, 0, 30, 30);
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
ss.setSpan(span, 1, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
myTextView.setText(ss);
我不太理解imagespan,因此这是我在尝试上面的代码后得到的(我在一个 Fragment
加载自 MainActivity
),
1条答案
按热度按时间oug3syen1#
不幸的是,据我所知,没有现成的android解决方案可以满足您的需求。您可以很好地查看span,但是span提供了对底层textpaint的访问,并且只能真正执行textpaint可以执行的操作。例外情况是replacementspan,它将全部替换已跨越的文本。您的imagespan是一个replacementspan,因此矩形将替换所有文本,并且不会像预期的那样覆盖。
有几种方法可以满足你的要求,但我更喜欢的方法是在文本上画一个圆角背景。这将是一个普遍的解决方案,但你需要调整它,使您的上划线绘制圆形背景。
如果你觉得这太过分了,而且你的文本视图很简单,你知道你想画的线不会跨越线的边界,你也可以看看这个。
您还可以创建一个简单的视图
2dp
宽度和你所需要的宽度,以覆盖一个背景的字母,并以编程方式移动它。自定义视图也可以覆盖所有文本,您可以在视图的onDraw()
功能。textviewstaticlayout有助于确定在自定义视图中应在何处绘制线。我敢肯定,有其他的解决方案,如果你在网上搜索他们。