Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否仅为文本编辑文本背景?_Android_Android Edittext - Fatal编程技术网

Android 是否仅为文本编辑文本背景?

Android 是否仅为文本编辑文本背景?,android,android-edittext,Android,Android Edittext,如何使用Android EditText实现这样的效果。它看起来有点像选中的文本,我在API中找不到类似的东西 这不是视图的背景色,而是仅用于文本的背景色。您可以看到它如何在换行处停止,并且在文本行之间有一条细细的白线 我尝试过使用Spannable,但新的行分隔符没有显示它正在选择所有文本,没有任何间隙 预期的 收购 代码 Spannable spannable = mNote.getText(); spannable.setSpan(new BackgroundColorSpan(Con

如何使用Android EditText实现这样的效果。它看起来有点像选中的文本,我在API中找不到类似的东西

这不是视图的背景色,而是仅用于文本的背景色。您可以看到它如何在换行处停止,并且在文本行之间有一条细细的白线

我尝试过使用
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);