Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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
Java 在Android中如何在可扩展字符串之间留出空间? 代码:_Java_Android_Android Layout_Android Activity - Fatal编程技术网

Java 在Android中如何在可扩展字符串之间留出空间? 代码:

Java 在Android中如何在可扩展字符串之间留出空间? 代码:,java,android,android-layout,android-activity,Java,Android,Android Layout,Android Activity,我从上面得到的结果是: 上述代码的问题是: 如何在两个spannable字符串之间添加空格 如何在矩形的开头和字符串的第一个字符(类似于矩形的结尾)添加空格。我试图通过以下代码添加空间: public class CustomDrawble extends ReplacementSpan { private int mBackgroundColor; private int mForegroundColor; public CustomDrawble(int backgroundCol

我从上面得到的结果是:

上述代码的问题是:

  • 如何在两个
    spannable
    字符串之间添加空格

  • 如何在矩形的开头和字符串的第一个字符(类似于矩形的结尾)添加空格。我试图通过以下代码添加空间:

    public class CustomDrawble extends ReplacementSpan {
    
    private int mBackgroundColor;
    private int mForegroundColor;
    
    public CustomDrawble(int backgroundColor, int foregroundColor) {
        this.mBackgroundColor = backgroundColor;
        this.mForegroundColor = foregroundColor;
    }
    
    @Override
    public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
        return Math.round(measureText(paint, text, start, end));
    
    }
    
    @Override
    public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
        float padding = 4f;
    
        RectF rect = new RectF(x, top + 3, x + measureText(paint, text, start, end) + 10, bottom + 10);
        paint.setColor(mBackgroundColor);
        canvas.drawRoundRect(rect, 10,10,paint);
        paint.setColor(mForegroundColor);
        canvas.drawText(text, start, end, x, y, paint);
    
    }
    
    private float measureText(Paint paint, CharSequence text, int start, int end) {
        return paint.measureText(text, start, end);
    }
    }
    
但它给了我一个扭曲的结果:

如果我没有错,那么上述代码的问题是两个
spannable
字符串之间没有足够的空格

我怎样才能使它正确

编辑-1 使用这个
rectfrect=newrectf(x-5,top+3,x+measureText(paint,text,start,end)+5,bottom+10)


看第一个,它从起点开始略微切入。但是如果我使用上面的配置,我在两个字符串中没有足够的空间。这是主要问题。

矩形的末尾删除额外的像素将解决跨距之间没有空间的问题

因此,从右侧的参数中删除
+10

像这样:

 RectF rect = new RectF(x+10, top + 3, x + measureText(paint, text, start, end) + 10, bottom + 10);
RectF rect = new RectF(x, top + 3, x + measureText(paint, text, start, end), bottom + 10);
还要在开始时添加空格,请在开始时放置一些负边距 像这样:

 RectF rect = new RectF(x+10, top + 3, x + measureText(paint, text, start, end) + 10, bottom + 10);
RectF rect = new RectF(x, top + 3, x + measureText(paint, text, start, end), bottom + 10);
下图将直观地解释这一点:


事实上,我在发布此问题之前尝试过负值:)顺便说一句,在编辑1部分签出最新的排列对于编辑1,您可以从左右两个方向再分割几个像素。因此,我在问题中提出了一个问题:如何在两个可跨越的字符串之间提供空间:)是的,我得到了你的问题:)并按照我在回答中解释的方式减少字符串周围的填充,前面的评论会有所帮助。我正在尝试并会让你知道