Строка поиска внутри WebView в Kotlin / Android - PullRequest
0 голосов
/ 29 августа 2018

Я новичок в Android и Kotlin. Я разрабатываю приложение, которое получает HTML-файлы с сайта и отображает их в WebView. Мне нужно создать функциональность как Ctrl - F (команда поиска) в WebNavigators, которая находит искомую строку и прокручивает экран до тех пор, пока не будет найдена соответствующая строка. И кнопка для следующего и предыдущего матчей.

Я пытаюсь следующий код, но он не работает:

myWebView.findAllAsync("Test in HTML file") 
myWebView.findNext(true) 

Может ли кто-нибудь помочь мне или дать мне направление?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Наконец, после поиска и поиска я нашел ответ. Размещение здесь, потому что может быть полезным для всех На основании этой статьи и этого запроса я создал свой код:

   override fun onCreate(savedInstanceState: Bundle?) {
     /// *... blah blah my code no related to this issue*
    wv_contentArticle.loadUrl("file:///android_asset/articles/w.html") // loading file - just a test
    sv_contentPage.isSubmitButtonEnabled
    // bellow listen the searchview 

    sv_contentPage.setOnQueryTextListener(object :    SearchView.OnQueryTextListener {
        override fun onQueryTextChange(query: String): Boolean {
            return true
        }
        override fun onQueryTextSubmit(query: String): Boolean {

            if (!query.isEmpty()) {
                    sv_contentPage.clearFocus()  // to hide keyboard 
                    wv_contentArticle.findAllAsync(query) // look for string
                    try {
                        val m = WebView::class.java.getMethod("setFindIsUp", 
java.lang.Boolean.TYPE) // THIS WAS MISSING, WITHOUT IT THIS WILL NOT WORK
                        m.invoke(wv_contentArticle, true) // THIS WAS MISSING, WITHOUT IT THIS WILL NOT WORK

                    } catch (ignored: Throwable) {
                    }
            }
        return true
        }
    })
    bt_findNext.setOnClickListener {  wv_contentArticle.findNext(true)  } // find next one
    bt_findPrevious.setOnClickListener {  wv_contentArticle.findNext(false) } // find previous one
}
0 голосов
/ 30 августа 2018

Следующая функция Kotlin является стандартной для поиска:

operator fun CharSequence.contains(
    char: Char, 
    ignoreCase: Boolean = false
): Boolean (source)

В WebView * метод 1004 * более полезен внутри if-statement:

import android.webkit.WebView

val str: String = // blah-blah-blah ;

if (str.contains("Test in HTML file", false))
    return true

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...