無設置 WebViewClient:
WebView 會請求 Activity Manager 選擇合適的方式來加載 URL,一般情況為啟動瀏覽器
有設置 WebViewClient 且其中的 shouldOverrideUrlLoading 方法返回 true:
由 host application 處理 URL,WebView 不處理
有設置 WebViewClient 且其中的 shouldOverrideUrlLoading 方法返回 false:
由 WebView 處理加載該 URL
# WebViewClient 源碼中 shouldOverrideUrlLoading 方法預設為返回 false
源碼:
* @param view The WebView that is initiating the callback.
* @param url The url to be loaded.
* @return True if the host application wants to leave the current WebView
* and handle the url itself, otherwise return false.
*/
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
設置 WebViewClient
val client = WebViewClient()
webView.setWebViewClient(client)
讀取 Url
webView.loadUrl("https://www.google.com/")
val view = window.peekDecorView()
val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0)
取得當前的 view,若 view 尚未存在會回傳 null
#window.getDecorView
取得當前 Windows 中最頂層的 View,若尚不存在不會回傳 null
(可能會 crush?)
用於控制或隱藏輸入法面板的 Class
透過 Context 的 getSystemService 方法加入參數 INPUT_METHOD_SERVICE 取得 InputMethodManager
請求收鍵盤
hideSoftInputFromWindow (windowToken: IBinder, flags: Int)
view.getWindowToken():回傳發出請求的視窗的 token
flags:提供額外操作的標誌,可能為 0 或 其他標誌
Google 搜尋為 GET Method(關於 HTTP 請求 參考資料 1、參考資料 2)
當使用 GET 的方法時,會將請求資訊附加在 URL 上並作為 QueryString 的一部份。
QueryString 是一種 key/value 的組合,從問號「?」開始都是一組一組的資料,每一組資料都用「&」隔開。
例如搜尋「good」時網址為:
https://www.google.com.tw/search?q=good&oq=good&aqs=chrome..69i57j69i60j69i65j69i60l2j0.2686j0j7&sourceid=chrome&ie=UTF-8其中下方這區段,即為用 GET Method 將搜尋字串「good」傳給 Google
https://www.google.com.tw/search?q=good
後方剩下的區段為提供給 Google 的其他資訊
依據 EditText 輸入產出網址並 loadUrl
依 GET Method 生成 Url 的方式產出搜尋的 Url
"https://www.google.com/search?q=" + editText.text.toString()
再讓 WebView loadUrl
webView.loadUrl("https://www.google.com/search?q=" + editText.text.toString())
WebView
WebViewClient
GET Method