1.效果图:
2.清单文件
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true" />
3.builder.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.admin.zkotlin"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
android {
buildTypes {
release {
// Enables code shrinking, obfuscation, and optimization for only
// your project's release build type.
minifyEnabled true
// Enables resource shrinking, which is performed by the
// Android Gradle plugin.
shrinkResources true
// Includes the default ProGuard rules files that are packaged with
// the Android Gradle plugin. To learn more, go to the section about
// R8 configuration files.
proguardFiles getDefaultProguardFile(
'proguard-android-optimize.txt'),
'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
4.activity_test
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:id="@+id/tv_test"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="TextActivity" />
<Button
android:id="@+id/btn_save"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="保存" />
<Button
android:id="@+id/btn_cancel"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="取消" />
</LinearLayout>
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
4.主界面:
package com.example.admin.zkotlin
import android.app.Activity
import android.graphics.Bitmap
import android.os.Build
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.KeyEvent
import android.view.View
import android.webkit.WebSettings
import android.webkit.WebView
import android.webkit.WebViewClient
import kotlinx.android.synthetic.main.activity_test.*
/**
Created by wrs on 2019/7/8,15:57
projectName: ZKotlin
packageName: com.example.admin.zkotlin
*/
class TextAvtivity : Activity(),View.OnClickListener{
// private val url = "https://riobiohultsfred.se"
private val url = "https://www.baidu.com/"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test)
tv_test.setText("TextAvtivity主界面")
btn_save.setOnClickListener(this)
btn_cancel.setOnClickListener(this)
// Get the web view settings instance
val settings = webview.settings
// Enable java script in web view
settings.javaScriptEnabled = true
// Enable and setup web view cache
settings.setAppCacheEnabled(true)
settings.cacheMode = WebSettings.LOAD_DEFAULT
settings.setAppCachePath(cacheDir.path)
settings.setSupportZoom(false)
// Enable zooming in web view
settings.builtInZoomControls = false
settings.displayZoomControls = false
// Enable disable images in web view
settings.blockNetworkImage = false
// Whether the WebView should load image resources
settings.loadsImagesAutomatically = true
// More web view settings
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
settings.safeBrowsingEnabled = true
}
settings.useWideViewPort = true
settings.loadWithOverviewMode = true
settings.javaScriptCanOpenWindowsAutomatically = true
// More optional settings, you can enable it by yourself
settings.domStorageEnabled = true
settings.setSupportMultipleWindows(true)
settings.loadWithOverviewMode = true
settings.setGeolocationEnabled(true)
settings.allowFileAccess = true
//webview setting
webview.fitsSystemWindows = true
/* if SDK version is greater of 19 then activate hardware acceleration
otherwise activate software acceleration */
webview.setLayerType(View.LAYER_TYPE_HARDWARE,null)
webview.loadUrl(url)
// Set web view client
webview.webViewClient = object : WebViewClient(){
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
// Page loading started
// Do something
}
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
// Page loading finished
// Enable disable back forward button
}
}
}
override fun onClick(v: View?) {
when(v?.id){
R.id.btn_save ->{
println("onClick"+btn_save.text)
}
R.id.btn_cancel -> {
println("onclick"+btn_cancel.text)
}
}
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
if (keyCode == KeyEvent.KEYCODE_BACK && event?.action==KeyEvent.ACTION_DOWN){
}
return super.onKeyDown(keyCode, event)
}
override fun onBackPressed() {
super.onBackPressed()
if (webview.canGoBack()) {
// If web view have back history, then go to the web view back history
webview.goBack()
}
}
}