Android 是否仅为文本编辑文本背景?
如何使用Android EditText实现这样的效果。它看起来有点像选中的文本,我在API中找不到类似的东西 这不是视图的背景色,而是仅用于文本的背景色。您可以看到它如何在换行处停止,并且在文本行之间有一条细细的白线 我尝试过使用Android 是否仅为文本编辑文本背景?,android,android-edittext,Android,Android Edittext,如何使用Android EditText实现这样的效果。它看起来有点像选中的文本,我在API中找不到类似的东西 这不是视图的背景色,而是仅用于文本的背景色。您可以看到它如何在换行处停止,并且在文本行之间有一条细细的白线 我尝试过使用Spannable,但新的行分隔符没有显示它正在选择所有文本,没有任何间隙 预期的 收购 代码 Spannable spannable = mNote.getText(); spannable.setSpan(new BackgroundColorSpan(Con
Spannable
,但新的行分隔符没有显示它正在选择所有文本,没有任何间隙
预期的
收购
代码
Spannable spannable = mNote.getText();
spannable.setSpan(new BackgroundColorSpan(ContextCompat.getColor(ThankYouNoteActivity.this, R.color.colorPrimaryDark));, 0, mNote.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
在如下所示的drawable文件夹中创建XML,并根据需要设置颜色。然后为编辑文本设置背景
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" /> <!--background color of box-->
</shape>
</item>
<item
android:top="-2dp"
android:right="-2dp"
android:left="-2dp">
<shape>
<solid android:color="@android:color/transparent" />
<stroke
android:width="1dp"
android:color="#000000" /> <!-- color of stroke -->
</shape>
</item>
</layer-list>
样品
使用
android.text.style.LineBackgroundSpan
检查此实现Hi-pskink谢谢您的评论您能详细说明此查询的答案吗?编写一个自定义LineBackgroundSpan
(实现LineBackgroundSpan
的类)并覆盖其trackground
方法我认为您正在使用填充来编辑文本,这就是您无法实现所需输出的原因。。
public class MyLineBackgroundSpan
implements LineBackgroundSpan {
private int backgroundColor = 0;
private int padding = 0;
public MyLineBackgroundSpan(int backgroundColor, int padding) {
this.backgroundColor = backgroundColor;
this.padding = padding;
}
@Override
public void drawBackground(Canvas c, Paint p, int left, int right, int top, int baseline, int bottom, CharSequence text, int start, int end, int lnum) {
final int textWidth = Math.round(p.measureText(text, start, end));
final int paintColor = p.getColor();
final Paint.FontMetrics fm = p.getFontMetrics();
// using fontMetrics is to free to lineSpacingExtra or includeFontPadding of TextView attributes.
RectF rect = new RectF(left - padding,
baseline + fm.ascent - padding,
left + textWidth + padding,
baseline + fm.descent + padding);
p.setColor(backgroundColor);
c.drawRect(rect, p);
p.setColor(paintColor);
}
}
int padding = 10;
SpannableString spannable = new SpnnableString("...");
spannable.setSpan(
new MyLineBackgroundSpan(ContextCompat.getColor(context, R.color.colorPrimaryDark), padding),
0, spannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setShadowLayer(padding, 0, 0, 0);
textView.setPadding(padding, padding, padding, padding);
textView.setText(spannable);