Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Spannable - цветной текст - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Приложение по публикации фото http://www.cyberforum.ru/android-dev/thread1734354.html
Здравствуйте, я, пока что, не программист на андроид. Однако мы создаем сайт, на котором пользователи будут публиковать фото. Для этого хотим сделать приложение, которое может делать только одну...
Программирование Android Запись массива в TextView Есть двумерный массив: int a в нём записаны "0" и "1" Я хочу вывести его на экран, но выводится только один "0". ... TextView table; ... String aa = ""; aa+=(a + "\n"); http://www.cyberforum.ru/android-dev/thread1734236.html
Читаются ли контакты с Viber Программирование Android
Есть контент провайдер content://com.viber.provider.vibercontacts но ясно без пермишена не работает, есть ли пермишен в интернете или они "защищают )" данные пользователя и доступа к контактам нет?
Программирование Android Открытие apk в андроид студио
Каким способом можно открыть apk в программе? просто надо проверить антивирус, а он засекает только тест файл apk при его запуске.
Программирование Android Ошибка с использованием нескольких Activity http://www.cyberforum.ru/android-dev/thread1734160.html
Здравствуйте, недавно только начал программировать на android и столкнулся с такой проблемой - вроде-бы делаю все по официальному гайду, но код не работает. Главный активити: public class...
Программирование Android Создание app-release.apk для публикации в маркете В общем, все сделал по документации. Android Studio сообщает о том, что apk был успешно собран и предлагает мне перейти в соответствующую папку. Я перехожу туда, а там нет подписанного apk файла. Там... подробнее

Показать сообщение отдельно
Pablito
2476 / 1960 / 611
Регистрация: 12.05.2014
Сообщений: 6,863
Завершенные тесты: 1
01.06.2016, 13:19
немного переделал - в коде нашел баг, не очищались Spannable, если вернуться в строке и изменить подсвеченное слово, оно не снимало подсветку
поэтому добавлен метод clearSpans и метод теперь принимает массив строк, вместо одной
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import android.content.Context;
import android.text.Editable;
import android.text.Spannable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.style.BackgroundColorSpan;
import android.util.AttributeSet;
import android.widget.EditText;
 
import java.util.ArrayList;
 
public class CustomEditText extends EditText {
 
    private final ArrayList<Integer> posList = new ArrayList<>();
    private String[] highlights;
    private int color;
 
    public CustomEditText(Context context) {
        super(context);
        init();
    }
 
    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
 
    private void init() {
        addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
 
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
 
            @Override
            public void afterTextChanged(Editable s) {
                clearSpans(s);
                for (String word: highlights) {
                    posList.clear();
                    if (s.length() > 0 && !TextUtils.isEmpty(word)) findOccurrences(word);
                    if (!posList.isEmpty()) highlight(s, word);
                }
            }
        });
    }
 
    private void findOccurrences(String word) {
        String text = getText().toString();
        int index = text.indexOf(word);
        while (index >= 0) {
            posList.add(index);
            index = text.indexOf(word, index + 1);
        }
    }
 
    private void highlight(Spannable where, String word) {
        for (Integer pos : posList) {
            int spanStart = pos;
            int spanEnd = spanStart + word.length();
            where.setSpan(new BackgroundColorSpan(color), spanStart, spanEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
    }
 
    private void clearSpans(Spannable where) {
        final BackgroundColorSpan[] spans = where.getSpans(0, where.length(), BackgroundColorSpan.class);
        for (BackgroundColorSpan s: spans) where.removeSpan(s);
    }
 
    public void setHighlightText(String[] highlighs, int color) {
        this.highlights = highlighs;
        this.color = color;
    }
}

ps: можно к мой код и не подглядывать, но пусть останется, вдруг пригодится кому-то
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru