在开发中我们经常遇到需要一个网页(htm5)来展示我们的界面或者需要一个静态的本地h5界面 那我们怎么来把这个地址镶嵌进我们的应用的 WebView为我们提供了便利
***支持进度条
***支持返回
***支持网络判断
***支持点击两次退出
第一步添加权限
<uses-permission android:name="android.permission.INTERNET" />//网络请求
第二步添加布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/fm"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
<WebView
android:id="@+id/wb"
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>
<ProgressBar
android:id="@+id/probar"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="1" />
</FrameLayout>
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/ima"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/b" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="无网络连接,请检查网络"
android:textColor="#000000" />
</LinearLayout>
</LinearLayout>
第三步 使用
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
wb.webViewClient = WebViewClient()
var settings = wb.getSettings();
settings.javaScriptEnabled = true
settings.databaseEnabled = true
settings.setGeolocationEnabled(true)
settings.setGeolocationDatabasePath(application.getDir("database", Context.MODE_PRIVATE).path)
settings.domStorageEnabled = true;
if (isNetworkConnected(this)) {
wb.loadUrl("http://www.baidu.com")
ll.visibility = View.GONE
fm.visibility = View.VISIBLE
} else {
ll.visibility = View.VISIBLE
fm.visibility = View.GONE
}
wb.webChromeClient = object : WebChromeClient() {
override fun onProgressChanged(view: WebView, progress: Int) {
if (progress == 100) {
probar.visibility = View.GONE
tv.visibility = View.GONE
} else {
probar.visibility = View.VISIBLE
tv.visibility = View.VISIBLE
tv.text = progress.toString()
}
}
}
}
fun isNetworkConnected(context: Context): Boolean {
if (context != null) {
var mConnectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
var mNetworkInfo = mConnectivityManager.getActiveNetworkInfo()
if (mNetworkInfo != null) {
return mNetworkInfo!!.isAvailable()
}
}
return false
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
if (keyCode == KeyEvent.KEYCODE_BACK && wb.canGoBack()) {
wb.goBack();//返回上个页面
return true;
}
if (keyCode == KeyEvent.KEYCODE_BACK) {
for2Click()
return true;
}
return super.onKeyDown(keyCode, event)
}
var isExit: Boolean = false
private fun for2Click() {
var tExit: Timer? = null
if (!isExit) {
isExit = true // 准备退出
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show()
tExit = Timer()
tExit.schedule(object : TimerTask() {
override fun run() {
isExit = false
}
}, 2000) // 2秒
} else {
finish()
System.exit(0)//finish();
}
}
}
好了 我在里面做了一个网络的判断 和点击两下退出功能,另外里面加了一个简易的进度条,小伙伴们可以自定义一个漂亮的