栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

安卓看娘版

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

安卓看娘版

以前写过这样的文章-跳转查看,最近闲来无聊想回顾一下,发现居然没看懂…这是万万不可的,写博客的初衷都没到达,自己都看不懂,更别说分享给别人了,所以又重新写了一份,希望某日之后回顾的时候能够轻松想起此时的思路。
首先通过此文章你可以了解到:
1.原生与H5交互
2.如何通过WebView将网页引入到APP中
3.一像素保活法具体实战

为了充分去体会到原生与H5的交互过程,这里写了一个切换效果

上一个,下一个,展示属于原生范围,整体界面和切换背景是H5部分,点击展示之后返回手机原页面,并且手机能够正常使用(类似一像素保活用法),注:未手机适配,不同手机可能出现效果不同


首先需要两个html界面以及两个Activity,其中一个是操作Activity,另一个是左下角的Activity,左下角这个模仿一像素保活法,只不过将一像素改成对应大小,以及添加了layout。

首先创建 assets 文件夹,用于存放 html 文件


两个html文件内容如下:

live2D




    
    
    live2d模型

    













live2D_title




    
    
    live2d模型

    












其次在Activity将WebView与界面绑定
如何通过WebView将网页引入到APP中

  1. 其中 mDataBind.mWebView.loadUrl("file:///android_asset/live2D.html") 是添加html到WebView中,注意下路径 file:///android_asset/ 如果有其他子路径,类似写下去,android_asset 就是刚才建的存放html的文件夹

  2. mDataBind.mWebView.addJavascriptInterface(this, "test")此方法是将整个Activity与该界面的JS相关联,此后在该WebView对应的html中 test 就代表了该Activity,用于Js调用原生方法

  3. 别忘了设置该WebView支持JS,否则整体方法就无效了

原生与H5交互,以此代码具体介绍

1.原生调用H5(无参)

原生中


H5中

2.H5调用原生(无参)

原生中

别忘了添加注解,否则找不到对应的方法(Koltin写法与Java写法需注意)

@SuppressLint("JavascriptInterface")
@JavascriptInterface

H5中

这里的 test 是不是有点眼熟呢,这就是通过 addJavascriptInterface 方法设置的那个,直接拿来调用就可以了。

3.原生调用H5(有参)

原生中

可以看到与无参的区别就是在括号内添加了对应参数,如果是多个参数别忘了添加 逗号哦

H5中

可以看到 JS 参数直接定义就可以,然后直接拿来用,多个参数别忘了逗号哦。

4. H5调用原生方法(有参)

原生中

H5中

一像素保活法具体实战

这里为什么要说一下这个呢,本人感觉这部分比较有意思,毕竟也是有过辉煌历史的写法,通过最开始截图也可以看出整体Activity是一小块,以前的文章里也是一小块,不过是伪造的方式,整体APP是无法操作的,这次是可以操作的

核心代码部分

单独写过一像素的Demo,发现APP确实有一像素,但是手机无法进行其他操作,那肯定是不行的,通过不可触摸解决了一像素Activity下手机无法操作的问题

 //全屏不可触摸
 window.setFlags(
 WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
 WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
        )
//取消全屏不可触摸 
//window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

最后说一下整体思路:

  1. 在 html 中将不同的看娘资源和背景分别放在不同的集合里,通过原生调用H5方法进行切换
  2. 切换之后通过 H5 调用原生方法 将当前下标传给原生
  3. 原生拿到下标,点击展示的时候跳转的像素Activity并将下标传过去
  4. 像素Activity拿到下标,通过原生调用H5方法将 下标传给 H5 进行展示

全部代码贴出:

1.网络权限


2.使用dataBinding

 dataBinding {
        enabled = true
    }

3.整体目录

MainActivity

class MainActivity : AppCompatActivity() {

    lateinit var mDataBind: ActivityMainBinding

    var bjIndex = "0"
    var rwIndex = "0"

    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mDataBind = DataBindingUtil.setContentView(this,R.layout.activity_main)
        initBar()
        initWeb()
        initEvent()
    }

    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    private fun initBar(){
        this.window.statusBarColor = this.resources.getColor(R.color.white)
        this.window.decorView.systemUiVisibility = SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
    }

    @SuppressLint("SetJavaScriptEnabled", "JavascriptInterface")
    private fun initWeb(){
        mDataBind.mWebView.webChromeClient = WebChromeClient()
        mDataBind.mWebView.settings.javaScriptEnabled = true
        mDataBind.mWebView.settings.domStorageEnabled = true
        mDataBind.mWebView.settings.javaScriptCanOpenWindowsAutomatically = true
        //mDataBind.mWebView.setBackgroundColor(0);//设置背景色
        //mDataBind.mWebView.background.alpha = 0;//设置填充透明度(布局中一定要设置background,不然getbackground会是null)
        mDataBind.mWebView.addJavascriptInterface(this, "test")
        mDataBind.mWebView.loadUrl("file:///android_asset/live2D.html")

    }

    private fun initEvent(){
        mDataBind.tvBack.setOnClickListener {
            mDataBind.mWebView.loadUrl("javascript:jsBack()");
        }
        mDataBind.tvNext.setOnClickListener {
            mDataBind.mWebView.loadUrl("javascript:jsNext()");
        }
        mDataBind.tvSelect.setOnClickListener {
            val it = Intent(this@MainActivity, ShowActivity::class.java)
            it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            it.putExtra("BJ_KEY",bjIndex)
            it.putExtra("RW_KEY",rwIndex)
            startActivity(it)
            finish()
        }

    }

    @SuppressLint("JavascriptInterface")
    @JavascriptInterface
    fun initWVBack(){
        Toast.makeText(this,"设置背景",Toast.LENGTH_SHORT).show()
    }

    @SuppressLint("JavascriptInterface")
    @JavascriptInterface
    fun initJS(){
        Toast.makeText(this,"没了..",Toast.LENGTH_SHORT).show()
    }

    @SuppressLint("JavascriptInterface")
    @JavascriptInterface
    fun getBjIndex(s: String){
         this.bjIndex = s
    }

    @SuppressLint("JavascriptInterface")
    @JavascriptInterface
    fun getRwIndex(s: String){
          this.rwIndex = s
    }
}

ShowActivity

class ShowActivity : AppCompatActivity() {

    lateinit var mDataBind: ActivityShowBinding

    var bjKey = "BJ_KEY"
    var rwKey = "RW_KEY"

    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //一像素的时候不需要setContentView方法
        mDataBind = DataBindingUtil.setContentView(this,R.layout.activity_show);
        val window = window
        //一像素保护法通用默认是左上
        window.setGravity(Gravity.LEFT or Gravity.BOTTOM)
        val params = window.attributes
        params.x = 0
        params.y = 0
        //一像素的时候这里都是1
        params.height = 400
        params.width = 200
        window.attributes = params
//        @SuppressLint("UseCompatLoadingForDrawables") val drawable =
//            this.resources.getDrawable(R.drawable.ic_launcher_background)
//        window.setBackgroundDrawable(drawable)
        //全屏不可触摸
        window.setFlags(
            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
        )
        //取消全屏不可触摸
        //window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

        //获取数据
        val i = intent.getStringExtra(bjKey)
        val j = intent.getStringExtra(rwKey)
        initWeb(i,j)
    }

    @SuppressLint("JavascriptInterface")
    private fun initWeb(i: String?,j: String?){
        mDataBind.mWebView.webChromeClient = WebChromeClient()
        mDataBind.mWebView.settings.javaScriptEnabled = true
        mDataBind.mWebView.settings.domStorageEnabled = true
        mDataBind.mWebView.settings.javaScriptCanOpenWindowsAutomatically = true
        //mDataBind.mWebView.setBackgroundColor(0);//设置背景色
        //mDataBind.mWebView.background.alpha = 0;//设置填充透明度(布局中一定要设置background,不然getbackground会是null)
        mDataBind.mWebView.addJavascriptInterface(this, "test")
        mDataBind.mWebView.loadUrl("file:///android_asset/live2D_title.html")
        Handler().postDelayed(Runnable {
            //2秒之后在这进行操作
            mDataBind.mWebView.loadUrl("javascript:setL2($i,$j)");
        }, 2000)


    }

}

activity_main




    

    

    

        

        

            

            

            

        

    

activity_show




    

    

    


        

    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862796.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号