webview和android做壳,Android Studio 制作一个 WebView 外壳

背景

做为一条BS狗,开发应用当然趋向于BS,为了方便维护,降低开发成本,决定只做一个webview做为程序入口,所有的功能页面集中在服务端。

本次踩坑遇到了 js不支持、点击返回直接退出应用、https/http混杂模式不支持等小坑,具体解决全部都在下面的代码中,请各位看官慢用。

工具

Android Studio

e03140265109

3.2

过程

1、新建一个FullScreen项目,命名为GodOne

2、应用配置:app/manifests/AndroidManifest.xml代码

package="ai.imud.godone">

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:usesCleartextTraffic="true"

android:theme="@style/Theme.AppCompat.NoActionBar">

3、后台部分:app/java/ai.imud.godone/MainActivity.java代码

package ai.imud.godone;

import android.annotation.SuppressLint;

import android.os.Build;

import android.support.v7.app.ActionBar;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.os.Handler;

import android.view.KeyEvent;

import android.view.MotionEvent;

import android.view.View;

import android.webkit.WebSettings;

import android.webkit.WebView;

import android.webkit.WebViewClient;

import android.view.Window;

import android.view.WindowManager;

import static android.view.KeyEvent.KEYCODE_BACK;

/**

* An example full-screen activity that shows and hides the system UI (i.e.

* status bar and navigation/system bar) with user interaction.

*/

public class MainActivity extends AppCompatActivity {

/**

* Whether or not the system UI should be auto-hidden after

* {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds.

*/

private static final boolean AUTO_HIDE = true;

/**

* If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after

* user interaction before hiding the system UI.

*/

private static final int AUTO_HIDE_DELAY_MILLIS = 3000;

/**

* Some older devices needs a small delay between UI widget updates

* and a change of the status and navigation bar.

*/

private static final int UI_ANIMATION_DELAY = 300;

private final Handler mHideHandler = new Handler();

private View mContentView;

private final Runnable mHidePart2Runnable = new Runnable() {

@SuppressLint("InlinedApi")

@Override

public void run() {

// Delayed removal of status and navigation bar

// Note that some of these constants are new as of API 16 (Jelly Bean)

// and API 19 (KitKat). It is safe to use them, as they are inlined

// at compile-time and do nothing on earlier devices.

mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE

| View.SYSTEM_UI_FLAG_FULLSCREEN

| View.SYSTEM_UI_FLAG_LAYOUT_STABLE

| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

}

};

private View mControlsView;

private final Runnable mShowPart2Runnable = new Runnable() {

@Override

public void run() {

// Delayed display of UI elements

ActionBar actionBar = getSupportActionBar();

if (actionBar != null) {

actionBar.show();

}

mControlsView.setVisibility(View.VISIBLE);

}

};

/**

* Touch listener to use for in-layout UI controls to delay hiding the

* system UI. This is to prevent the jarring behavior of controls going away

* while interacting with activity UI.

*/

private final View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() {

@Override

public boolean onTouch(View view, MotionEvent motionEvent) {

return false;

}

};

private WebView webView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//全屏

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

webView = (WebView) findViewById(R.id.wv_webview);

WebSettings webSettings = webView.getSettings();

//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript

webSettings.setJavaScriptEnabled(true);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

}

webSettings.setBlockNetworkImage(false);//解决图片不显示

//设置自适应屏幕,两者合用

webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小

webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小

//缩放操作

webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。

webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放

webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件

//其他细节操作

webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存

webSettings.setAllowFileAccess(true); //设置可以访问文件

webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口

webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片

webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式

webView.loadUrl("https://news.163.com");

webView.setWebViewClient(new WebViewClient(){

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

//使用WebView加载显示url

view.loadUrl(url);

//返回true

return true;

}

});

}

@Override

protected void onPostCreate(Bundle savedInstanceState) {

super.onPostCreate(savedInstanceState);

}

public boolean onKeyDown(int keyCode, KeyEvent event) {

if ((keyCode == KEYCODE_BACK) && webView.canGoBack()) {

webView.goBack();

return true;

}

return super.onKeyDown(keyCode, event);

}

}

4、 布局部分代码app/res/layout/activity_main.xml

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#0099cc"

tools:context=".MainActivity">

5、更改图标

e03140265109

第一步

e03140265109

选择前景图,就是自己制作好的图标

e03140265109

设置背景色

下一步,警告不用管,结束。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值