1

Привета У меня есть несколько вида автозаполнения текста с пространством Tokenizer и использовать ReplacementSpan для изменения цвета фона в каждых контактахReplacementSpan в multiautocomplete TextView перекрытии

моего заказа замена код

public class MyForgroudSpan : ReplacementSpan 
{ 
    public override void Draw(Canvas canvas, ICharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) 
    { 

     var rect = new RectF(x , top, x + paint.MeasureText(text, start, end)+8, bottom); 
     paint.Color = Android.Graphics.Color.ParseColor("#E5E5E6"); 
     canvas.DrawRect(rect, paint); 
     paint.Color = Android.Graphics.Color.Black; 
     int xPos = Java.Lang.Math.Round(x + (8/2)); 
     int yPos = (int)((canvas.Height/2) - ((paint.Descent() + paint.Ascent())/2)); 

     canvas.DrawText(text, start, end, xPos, yPos, paint); 

    } 
    public override int GetSize(Paint paint, ICharSequence text, int start, int end, Paint.FontMetricsInt fm) 
    { 
     return Java.Lang.Math.Round(paint.MeasureText(text, start, end))+8; 
    } 
} 

я установить spannable строки здесь

SpannableStringBuilder ssb = new SpannableStringBuilder(Text.trim()); 
ssb.SetSpan(new MyForgroudSpan(), x, x + c.Length, SpanTypes.ExclusiveExclusive); 

его нормально, когда несколько автообновленных текстовых просмотров имеют одну строку, но они поступают на несколько строк, это означает, что они перекрывают каждый текст

смотрите на экраны

1.Single линии

single line image

2.multiline изображения

Multiline image

Когда я использую у значения, как этот

canvas.DrawText(text, start, end, xPos, y, paint); 

lyout like this no vertical space between line

ответ

0

Если вы используете ReplacementSpan только изменить цвет фона вы можете, а просто использовать BackgroundColorSpan:

ssb.SetSpan(
    new BackgroundColorSpan(
    Android.Graphics.Color.ParseColor("#E5E5E6"), 
    x, 
    x + c.Length, 
    SpanTypes.ExclusiveExclusive)); 

Проблема перекрытия происходит потому, что вы не используете значение у в вашей Метод DrawText. Если вы замените его

canvas.DrawText(text, start, end, xPos, y, paint); 

он должен выглядеть правильный

+0

ли вы проверить эту – Manikandan

+0

Yep. как уже упоминалось, если вы хотите придерживаться своего фактора замены SpplacementSpan в параметре y метода Draw в вашем canvas.DrawText. В вашем фрагменте вы полностью игнорируете его. Это приводит к тому, что текст рисуется с одинаковым смещением y, независимо от его номера строки. –

+0

, пожалуйста, уточните мой обновленный вопрос, когда я использую значение y, это текст фона, выглядящий таким образом, даже я устанавливаю дополнительное пространство пробела – Manikandan