初衷:
雖然現在市場上瀏覽器很多,比如chrome,夸克,沒有廣告,新聞等亂七八糟的東西,頁面簡單清晰,但是自己的瀏覽記錄還是存放在別人的服務器,就算刪除了,開隱身模式了,但是具體後臺的操作誰又知道呢,鑑於此自己做一個瀏覽器,實現最基本的搜索,地址加載,響應下載等,實現最基本的功能,沒有廣告,沒有啓動頁,沒有新聞資訊,沒有推送,沒有後臺記錄,沒有進程保活等煩人的東西。
開始
1. 首先準備一個空白的Android項目(我此處語言採用Kotlin)。
O(∩_∩)O哈哈~
2. 寫佈局
非常簡單,哈哈
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="0dp"
android:layout_height="35dp"
android:lines="1"
android:singleLine="true"
android:inputType="textUri"
android:imeOptions="actionSend"
android:textSize="12sp"
tools:text="asdasdasdas"
android:textColor="#333333"
android:paddingStart="10dp"
android:paddingEnd="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:background="@drawable/url_bac"/>
<ProgressBar
android:id="@+id/progressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="2dp"
android:progress="50"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText" />
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/progressBar" />
</androidx.constraintlayout.widget.ConstraintLayout>
3. 初始化Webview的一些設置
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initView()
initListener()
loadDefaultUrl()
}
private fun initView() {
webView = findViewById(R.id.webView)
editText = findViewById(R.id.editText)
progressBar = findViewById(R.id.progressBar)
val settings = webView.settings
settings.javaScriptEnabled = true
settings.javaScriptCanOpenWindowsAutomatically = true//js和android交互
settings.allowFileAccess = true // 允許訪問文件
settings.setAppCacheEnabled(true) //設置H5的緩存打開,默認關閉
settings.useWideViewPort = true//設置webview自適應屏幕大小
settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.NARROW_COLUMNS//設置,可能的話使所有列的寬度不超過屏幕寬度
settings.loadWithOverviewMode = true//設置webview自適應屏幕大小
settings.domStorageEnabled = true//設置可以使用localStorage
settings.setSupportZoom(false)//關閉zoom按鈕
settings.builtInZoomControls = false//關閉zoom
}
private fun loadDefaultUrl() {
//訪問網頁
webView.loadUrl("http://www.baidu.com")
}
4. 監聽返回鍵,當webview可以後退的時候,不結束應用
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
if(event?.keyCode == KeyEvent.KEYCODE_BACK){
if(webView.canGoBack()) {
webView.goBack()
return true;
}
}
return super.onKeyDown(keyCode, event)
}
5. 監聽輸入框,加載輸入的地址
editText.setOnEditorActionListener { p0, p1, p2 ->
if(p2?.keyCode == KeyEvent.KEYCODE_ENTER){
var url = editText.text.toString()
if(!url.startsWith("http")&&!url.startsWith("https")){
url="http://$url"
}
webView.loadUrl(url)
ImTool.closeKeyBoard(baseContext,editText)
}
false
}
6.設置webviewclient,並且監聽頁面加載進度,當頁面加載結束的時候,設置url到輸入框
webView.webChromeClient = object : WebChromeClient() {
override fun onProgressChanged(view: WebView, newProgress: Int) {
super.onProgressChanged(view, newProgress)
if(newProgress >= 99){
progressBar.visibility = View.GONE
}else if(progressBar.visibility == View.GONE){
progressBar.visibility = View.VISIBLE
}
progressBar.progress = newProgress
}
}
webView.webViewClient = object:WebViewClient(){
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
editText.setText(url)
}
}
7.響應頁面的下載
webView.setDownloadListener { url, userAgent, contentDisposition, mimetype, contentLength ->
val i = Intent(Intent.ACTION_VIEW)
i.data = Uri.parse(url)
startActivity(i)
}
8. 運行一下試試:
至此,基本的功能就有了,再也不用擔心瀏覽器泄漏你的瀏覽記錄了,但是也還是防不了百度和其他網站有可能會泄漏你的瀏覽記錄,畢竟這還得靠這些網站自覺了。
最後帶上源碼鏈接:
https://github.com/MaXiaopingIT/MinewebBrowser