С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Непонятка с разметкой http://www.cyberforum.ru/android-dev/thread1725953.html
Имею почему-то 0 вместо слова Аватар. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"...
Программирование Android MediaPlayer переключение Добрый день. Реализую переключение музыкальных файлов. Есть код. Всё просто. Одна кнопка - один трек. Всего два трека - две кнопки. Первый раз, всё успешно проигрывается, но при повторных нажатиях,... http://www.cyberforum.ru/android-dev/thread1725944.html
Программирование Android Recyclerview при onLongItemClick срабатывает и onItemClick?
использую такой класс для клика по айтемам: нажимаю долгий клик открывается контекстменю а так же происходит обычный клих на этом айтеме, в чем может быть дело, помогите пожалуйста? ...
Обновление данных Программирование Android
Добрый день. Еще такая проблема возникла. Есть форма где нужно редактировать информацию, ввел нужные коррективы и нажал кнопку сохранить оно обновляет ее в базе. А вот когда нажимаю кнопку...
Программирование Android Ошибка minSDK(API 23, N preview) != deviceSDK(API 17) http://www.cyberforum.ru/android-dev/thread1725858.html
Недавно начал учить андроид и возникла такая ошибка, когда я пытаюсь запустить проект на своем телефоне или эмуляторе. При этом в проекте выставлено "minSdkVersion 15". Режим отладки включен,...
Программирование Android Форматирование строки, полученной из БД Доброго времени суток! Сразу скажу, что пытался найти, как выполнить форматирование строки, но нашел только способ, когда в Strings создается строка. И к ней вроде как автоматически уже понимается... подробнее
Pablito
2777 / 2206 / 746
Регистрация: 12.05.2014
Сообщений: 7,737
Завершенные тесты: 1
02.05.2016, 19:47 0

Поиск как в браузере

02.05.2016, 19:47. Просмотров 1461. Ответов 21
Метки (Все метки)

Ответ

мне стало интересно и я накидал простой примерчик
работает поиск и кнопки - next/prev
пока что не знаю как сделать по-человечески автоматическую прокрутку текста если его много, но думаю что для начала и так сойдет

минимально необходимый код в активити
Кликните здесь для просмотра всего текста
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
77
78
79
80
81
82
83
package com.example.mytestapplication;
 
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextWatcher;
import android.text.style.BackgroundColorSpan;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
 
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class MainActivity extends AppCompatActivity {
 
    private final ArrayList<Integer> posList = new ArrayList<>();
    private int current;
    private TextView tv;
    private BackgroundColorSpan colorSpan;
    private EditText et;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        colorSpan = new BackgroundColorSpan(ContextCompat.getColor(this, R.color.colorAccent));
        tv = (TextView) findViewById(R.id.textView);
        findViewById(R.id.nextButton).setOnClickListener(btnClickListener);
        findViewById(R.id.prevButton).setOnClickListener(btnClickListener);
        et = (EditText) findViewById(R.id.editText);
        et.addTextChangedListener(textWatcher);
    }
 
    private final View.OnClickListener btnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (v.getId() == R.id.nextButton) current++;
            else current--;
            if (current < 0) current = posList.size() - 1;
            else if (current >= posList.size()) current = 0;
            findOccurrence();
        }
    };
 
    private final TextWatcher textWatcher = 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) {
            posList.clear();
            Pattern p = Pattern.compile(s.toString());
            Matcher m = p.matcher(tv.getText().toString());
            while (m.find()) posList.add(m.start());
            current = 0;
            findOccurrence();
        }
    };
 
    private void findOccurrence() {
        String where = tv.getText().toString();
        if (posList.isEmpty()) {
            tv.setText(where);
        } else {
            Spannable selectSpan = new SpannableString(where);
            int spanStart = posList.get(current);
            int spanEnd = spanStart + et.getText().toString().length();
            selectSpan.setSpan(colorSpan, spanStart, spanEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            tv.setText(selectSpan);
        }
    }
}

разметка на которой тренировался
Кликните здесь для просмотра всего текста
XML
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
 
        <EditText
            android:id="@+id/editText"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
 
        <Button
            android:id="@+id/prevButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Prev" />
 
        <Button
            android:id="@+id/nextButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Next" />
 
    </LinearLayout>
 
    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/dummy_text"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />
 
</LinearLayout>

"@string/dummy_text" - любой длинный текст
Поиск как в браузере

если клацать кнопки next/prev то будет искать вхождения "по кругу"

Вернуться к обсуждению:
Поиск как в браузере
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2016, 19:47

Как сделать что-бы работала закачка в своём браузере
Как разрешить закачку файлов в своём браузере? У меня при нажатии на кнопку...

Как открыть url для авторизации в браузере и после вернуть токен в приложение?
Здравствуйте! Никак не пойму как я могу открыть URL в браузере Android, чтобы...

Как сделать так, чтобы ссылка (к примеру http://google.com) открывалась в стандартном браузере?
Как сделать так, чтобы ссылка (к примеру http://google.com) открывалась в...

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