背景

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

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

工具

Android Studio

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、更改图标

第一步

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

设置背景色

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

webview和android做壳,Android Studio 制作一个 WebView 外壳相关推荐

  1. 物联网控制APP入门专题(四)---使用android studio制作一个控制页面的APP框架

    摘要:上篇文章讲了如何用阿里云IoT Studio快速制作一个网页版的手机端,以及通过第三方平台将这个网页打包成一个APK文件,使它可以安装到手机实现APP的功能.但是使用第三方平台做的APP是需要收 ...

  2. android动画view上移,在Android开发中使用View制作一个引导动画

    在Android开发中使用View制作一个引导动画 发布时间:2020-11-20 16:46:16 来源:亿速云 阅读:98 作者:Leah 这篇文章将为大家详细讲解有关在Android开发中使用V ...

  3. android打地鼠设计报告,android开发中利用handler制作一个打地鼠小游戏

    android开发中利用handler制作一个打地鼠小游戏 发布时间:2020-11-25 15:21:11 来源:亿速云 阅读:136 作者:Leah 这期内容当中小编将会给大家带来有关androi ...

  4. 如何使用android studio制作一个阿里云物联网APP

    摘要:要想学会物联网技术,需要掌握的知识真的有太多了,其中一个关键的技能,也是决定物联网技能等级的,就是移动端开发能力.当然,现在有很多平台都提供了各种各样的移动端应用,但是都相对封闭,我们无法掌握其 ...

  5. 蓝牙App设计2:使用Android Studio制作一个蓝牙软件(包含:代码实现等)

    前言:蓝牙聊天App设计全部有三篇文章(一.UI界面设计,二.蓝牙搜索配对连接实现,三.蓝牙连接聊天),这篇文章是:二.蓝牙搜索配对连接实现. 课程1:Android Studio小白安装教程,以及第 ...

  6. android菜单动画,利用 android studio 制作一个菜单动画

    目的:利用Android studio 编一个菜单动画,以便初步了解Android studio的基本操作,初步了解Android开发的思考方法. 技术: 1.RelativeLayout. 2.sr ...

  7. Android 数据库制作APP,在Android 中使用Anko框架制作一个完整的App,第二集

    作者:feintkotlin(Kotlin学习网) 说明:这次更新对一些小的细节进行了改进,并增加了SQLite的操作.该应用支持6.0及以上android系统 更新:当有网络时,将前5条数据保存到数 ...

  8. ai怎么做盒子效果图_AI制作一个漂亮的3D立体质感标志

    这篇教程教脚本之家的朋友们用AI制作一个漂亮的3D立体质感标志方法,教程绘制的效果图很漂亮绘制的难度中等,教程中同时还是用PS做了简单的处理.转发过来和脚本之家的AI爱好者们一起学习这个标志的绘制.希 ...

  9. 超市微信小程序怎么做_新手如何制作一个超市小程序?能发挥什么作用?

    对于线下超市实体店来说,开发一个自己的社区超市小程序,能获得不少好处: (1)提升线下店铺曝光度 微信"附近的小程序"功能,会向用户展示其5公里内的开发了小程序的商家,也就是说,实 ...

最新文章

  1. 一个自己设计的软件框架
  2. Android Bluetooth模块学习笔记
  3. Spring Boot实战pdf
  4. Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
  5. Opengl_20 _复习变换矩阵+复习光源+两个模型使用不同的shader
  6. android老 电池,为什么安卓手机不会因为电池的老化而降频呢?
  7. windows稀疏文件
  8. log4j-over-slf4j与slf4j-log4j12共存stack overflow异常
  9. Android AndroidNSSP的简单说明
  10. 通用逼近定理证明_通用逼近定理:代码证明
  11. 易语言批量替换html,易语言实现批量文本替换操作的代码
  12. 学习模式上的记录之统计篇一 秩和检验
  13. Franz Mandl, Graham Shaw《Quantum Field Theory (2nd)》(弗兰兹·曼德尔, 格雷厄姆·肖《量子场论(第二版)》)中文目录
  14. [AutoCAD.Net][事件] AUTOCAD 选择对象后触发事件
  15. python求标准正态分布的分布函数值(具体实现及调用函数)
  16. postMan传递枚举值
  17. VR科普主题项目VR模拟体验设备VR科普馆
  18. 运用js绘制SVG图片
  19. 乙方视角看中台?《中台实践》首屈一指
  20. 中国省级GDP增长目标(2000-2018年)

热门文章

  1. VScode Extension activation failed的解决方法
  2. 计算机专业拜年语,南昌理工学院计算机信息工程学院给您拜年啦!!
  3. 快看!2020全网刷屏的流行语,你竟然还不知道?!
  4. VM8 asdebug.js:1 GET http://192.168.1.106:7101/GOODS/G-F-Kill net::ERR_CONNECTION_REFUSED
  5. 使用el-dialog时,报错“Unknown custom element:<el-dialog> did you register the component correctly?...make
  6. oc错误:control reaches end of non-void function
  7. python情人节之玫瑰花与表白方式,用python画一朵玫瑰花,拿去表白趴
  8. 黑马程序员C++笔记
  9. 常用CV数据集(持续更新中)
  10. 转专业菜鸡的秋招总结