Android之混合开发

Installation failed with message Invalid File:

在这里插入图片描述
这个问题 在今天的学习中出现了!!
究其原因 由于安卓开发一般都是很久才会启用一次项目
而频繁的更换项目可能会出现包名相同的情况
所以AndroidStudio 自动判断这个项目已经安装过了 然后让你不要安装(这也是AndroidStudio 的新特性)
解决方案:
在这里插入图片描述

===============================================================================
目前的主流软件(京东 淘宝 等都是采用这种开发模式 节约成本 而不必开发软件太去照顾不同的操作系统 Android ,IOS ) 可以使用Web来开发!

本人是手机开热点 与电脑相连 故启动Tomcat运行软件的时候要先查询到电脑连接热点时候的ip地址
(怎么查手机的ip地址 我就不说了 百度上有 就在关于手机->状态信息 里面就有)
在这里插入图片描述

然后介绍一下查询电脑的ip地址的方法
开始+R -> cmd ->ipconfig
在这里插入图片描述
使用的时候用电脑 提供的ip地址就可以了

关于启动Tomcat 然后 webapps目录下 放html 文件之类的我就不多说了
基本操作弄完以后 可以开始我们的代码分析了

WebView

先看xml
在这里插入图片描述
在看java中的

1.方法 指的是界面不会跳转到浏览器中 而是实现超链接 (返回值要是 false)
方法之前的这行代码:

  @SuppressLint("NewApi")

解释如下:
在这里插入图片描述
2.
WebSettings 的获取以及使用

WebSettings settings = wv.getSettings();
//当前被操控的WebView
    WebView currWV;

    //对指定WebView进行初始化的方法
    @SuppressLint("NewApi")
    public void initWebView(WebView wv)
    {
        //设置WebView中的超链接被点击时不跳转到系统的浏览器显示超链接指向的页面
        wv.setWebViewClient
        (
            new WebViewClient()
            {
                @Override
                public boolean shouldOverrideUrlLoading(WebView wv, String url)
                {//第一个入口参数为显示新页面的WebView
                    //对WebView进行初始化
                    initWebView(wv);
                    //设置此WebView为当前WebView
                    MyActivity.this.currWV =wv;
                    //返回false告诉系统由此WebView对URL进行处理
                    return false;
                }
            }
        );
        //获取设置对象
        WebSettings settings = wv.getSettings();
        //设置字体显示的缩放比,默认为100
        settings.setTextZoom(25);
        //设置不使用缓存
        settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        //设置禁用横向滚动条
        wv.setHorizontalScrollBarEnabled(false);
        //设置启用纵向滚动条
        wv.setVerticalScrollBarEnabled(true);
    }

3.加载主页的方法

currWV.loadUrl("http://"+host+":"+port+"/CityTour/city_list.html");

4.清楚缓存以及重新加载的方法

currWV.clearCache(true);
currWV.reload();

在这里插入图片描述
5.返回上一个界面

currWV.goBack();

====================================================================
下面介绍一下逻辑以及特殊的地方
WebView 与Activity不同 返回时的逻辑不一样
Activity返回是一个Activity一个Activity的返回 (可本Demo的Activity只有一个)
而 WebView 是返回到上一个界面 (只有 return true 的时候才执行了返回上一层的命令 退出应用的时候都是返回false)

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        //如果按下的是返回键
        if(keyCode==KeyEvent.KEYCODE_BACK)
        {
            //如果当前WebView可以返回上一层页面
            if(currWV.canGoBack())
            {
                //获取当前的URL
                String urlStr= currWV.getUrl();
                //如果是首页
                if(urlStr.endsWith("city_list.html"))
                {
                    //退出应用
                    this.finish();
                    return false;
                }
                else
                {
                    //返回上一层页面
                    currWV.goBack();
                    return true;
                }
            }
            else
            {
                //退出应用
                this.finish();
                return false;
            }
        }
        return false;
    }

=======================================================================

源码

只是实现了一个很简单的静态小Demo

public class MyActivity extends Activity {

    //static String host="192.168.8.2";
   // static String host="10.128.76.108";
    static String host="192.168.43.250";
    static String port="8080";

    //当前被操控的WebView
    WebView currWV;

    //对指定WebView进行初始化的方法
    @SuppressLint("NewApi")
    public void initWebView(WebView wv)
    {
        //设置WebView中的超链接被点击时不跳转到系统的浏览器显示超链接指向的页面
        wv.setWebViewClient
        (
            new WebViewClient()
            {
                @Override
                public boolean shouldOverrideUrlLoading(WebView wv, String url)
                {//第一个入口参数为显示新页面的WebView
                    //对WebView进行初始化
                    initWebView(wv);
                    //设置此WebView为当前WebView
                    MyActivity.this.currWV =wv;
                    //返回false告诉系统由此WebView对URL进行处理
                    return false;
                }
            }
        );
        //获取设置对象
        WebSettings settings = wv.getSettings();
        //设置字体显示的缩放比,默认为100
        settings.setTextZoom(25);
        //设置不使用缓存
        settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        //设置禁用横向滚动条
        wv.setHorizontalScrollBarEnabled(false);
        //设置启用纵向滚动条
        wv.setVerticalScrollBarEnabled(true);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        //如果按下的是返回键
        if(keyCode==KeyEvent.KEYCODE_BACK)
        {
            //如果当前WebView可以返回上一层页面
            if(currWV.canGoBack())
            {
                //获取当前的URL
                String urlStr= currWV.getUrl();
                //如果是首页
                if(urlStr.endsWith("city_list.html"))
                {
                    //退出应用
                    this.finish();
                    return false;
                }
                else
                {
                    //返回上一层页面
                    currWV.goBack();
                    return true;
                }
            }
            else
            {
                //退出应用
                this.finish();
                return false;
            }
        }
        return false;
    }

    @SuppressLint("NewApi")
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //获取WebView
        currWV = (WebView) findViewById(R.id.wv01);
        //初始化WebView
        initWebView(currWV);
        //加载主页
        currWV.loadUrl("http://"+host+":"+port+"/CityTour/city_list.html");
        //获取刷新按钮
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(
                //刷新按钮监听器
                (v)->
                {
                    //清除缓存
                    currWV.clearCache(true);
                    //重新加载
                    currWV.reload();
                }
        );

        button = (Button) findViewById(R.id.button2);
        button.setOnClickListener(
                //返回按钮的监听器
                v->{currWV.goBack();}
        );
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41910103/article/details/82950865