2016-04-04 3 views
0

Как добиться такого эффекта с помощью Android EditText. Это похоже на выделенный текст, и я не мог найти что-то подобное в API.Изменить текст только для текста?

Это не цвет фона для представления, а цвет фона только для текста. Вы можете видеть, как он останавливается при разрыве строк и имеет тонкую белую линию между текстовыми строками.

Я пробовал с Spannable, но новый разделитель строк не отображается. Он выбирает весь текст без пробелов.

Ожидаемое

enter image description here

Приобретенные

enter image description here

Код

Spannable spannable = mNote.getText(); 
spannable.setSpan(new BackgroundColorSpan(ContextCompat.getColor(ThankYouNoteActivity.this, R.color.colorPrimaryDark));, 0, mNote.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
+0

использование 'android.text.style.LineBackgroundSpan' – pskink

+0

Проверьте это [ссылка] SO (http://stackoverflow.com/a/ 10676390/3831557) для реализации –

+0

Привет, пскинк, спасибо за ваш комментарий, можете ли вы разработать концепцию в качестве ответа на этот запрос? – Christ

ответ

-1

создайте XML в выпадающей папке, как показано ниже, и установите цвета по своему усмотрению. Затем установите фон для EditText.

<?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> 
1
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); 
} 
} 

Образец

see

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); 
Смежные вопросы