Поиск по WebView (Android)
Привет всем. Я сейчас пишу небольшое приложение на Android.
Бился только что над одной проблемой и благополучно ее решил. Как правило на русском языке документации по разрабоке на android мало, буду эту ситуацию исправлять по мере возможности.
Сейчас будем делать поиск по компоненту WebView с выделением найденного текста.
Стандартно создаем новый проект. Кидаем на форму сначала LinearLayout(vertical) внутрь него кидаем LinearLayout(horisontal). Внутри LinearLayout(horisontal) располагаем EditText и две кнопки. Это будет панель поиска.
Чуть ниже LinearLayout(horisontal) располагаем WebView.
Картина должна быть примерно такая:
Надписи на кнопках можете задавать какие захотите.
Далее переключаемся в код который отвечает за это окно.
Объявляем переменные:
1 2 3 | private WebView web; //для обращения к компоненту webView1 Button next, perv, search; // для обращения к кнопкам поиска EditText editsearch; // для обращения к тексту который для поиска |
далее в обработчике onCreate присваиваем значения нашим переменным:
1 2 3 4 5 6 7 8 9 | web = (WebView) findViewById(R.id.webView1); web.loadUrl("http://programmerinfo.ru/"); next = (Button) findViewById(R.id.next); next.setOnClickListener(this); perv = (Button) findViewById(R.id.perv); perv.setOnClickListener(this); search = (Button) findViewById(R.id.search); search.setOnClickListener(this); editsearch = (EditText) findViewById(R.id.editsearch); |
Далее пропишем реакцию на нажатие кнопок:
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 | @Override public void onClick(View v) { // ищем следующий элемент if (v.getId()== R.id.next) { web.findNext(true); } // ищем предыдущий элемент if (v.getId()== R.id.perv) { web.findNext(false); }; // нажатие на кнопку поиск, поиск всех элементов if (v.getId()== R.id.search) { int i; //число найденных элементов i= web.findAll(editsearch.getText().toString()); //поиск всех элементов // вывод количества найденных элементов Toast.makeText(getApplicationContext(), "Found "+i+" results !", Toast.LENGTH_SHORT).show(); // подсвечивание, выделение элементов поиска try { Method m = WebView.class.getMethod("setFindIsUp", Boolean.TYPE); m.invoke(web, true); } catch (Throwable ignored){} web.setSelected(true); web.findNext(true); }; } |
Особое внимание обратите на код
1 2 3 4 5 6 | try { Method m = WebView.class.getMethod("setFindIsUp", Boolean.TYPE); m.invoke(web, true); } catch (Throwable ignored){} |
Без него выделения искомого текста происходить НЕ будет.
На этом все.
Если остались вопросы — вот исходник
Пока!
Понравилась статья? Жми: | Поделиться в соц. сетях |
На всякий случай скачал, но пробовать буду на досуге.
В принципе на своём планшетнике Андроид только в пути использую.
А файлы ставлю на флешку для просмотра.
Ну конечно почту и свои статьи на сайтах, и
просто деловые заготовки.
Было-бы программ необходимый комплект для Андроида, то его можно- бы поставить на системный блок.
Только вот не знаю как сантивирусником для Андроида, тот что в комплекте слабоват, для «Нашистов» под крышей ФСБ-шников
Привет Артём,
не вижу ссылок на социальные сети
Пишешь о рекламе, а ссылки что забыл.
На хакерские, спутниковые сайты захожу, чистильщики для реестров, чертилки с кряками, столько народу там много бывает ключи, для прог, сами Проги и прочие нужные драйвера кряки.
Все это привлекает, там продажами занимаются,
вот это и привлекает народ.
ну конечно секс, политика и происшествия, слухи о знаменитостях
Из контакта народ уходит
Интресно какое отношение имеет этот камент ко всему сказаному выше?
судя по коду может быть ОДНОВРЕМЕННО поиск предыдущего, поиск следующего и поиск всех….. Это так?
Не совсем, нужно немного знать основы программирования под андроид
Там нет конструкций if .. else ….? Или switch?
Как это нет? Есть if
Вот же
// ищем следующий элемент
if (v.getId()== R.id.next)
А снять выделение?..
Здравствуйте, поиск некорректно немного работает, при нажатии на «поиск» слова подсвечиваются оранжевым не в порядке очереди, может и 10-е подсветить сначала, тогда как первые 9 — желтым. Как это исправить?