WebView总结

WebView深究之Android是如何实现webview初始化的 webview初始化关注Android加载webview内核的过程。我们从WebView的init过程中切入。 WebView的构造方法,最终都会调用WebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes, Map<String, Object> javaScriptInt 阅读详情

WebView总结

在Android中有WebView Widget,它内置了WebKit引擎,同时,WebKit也是Mac OS X的Safari网页浏览器的基础。WebKit是一个开源的浏览器引擎,
Chrome浏览器也是基于它的。所以很多表现WebView和Chrome是一样的。

很多文章中多会说在使用WebView之前,要在AndroidManifest.xml中添加 如下权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
否则会出Web page not available错误。其实这是不全面的,如果我加载本地的页面是不用该权限的。

  • 设置WevView要显示的网页方法有很多:

    • mWebView.loadUrl(“http://www.google.com“); // 网络
    • mWebView.loadUrl(“file:///android_asset/XX.html“); // 本地页面,这里的格式是固定的,文件要放到assets目录下
    • mWebview.postUrl(String url, byte[] postData); // 加载页面使用Post方式,postData为参数
      java
      String postData = "password=password&username=username";
      mWebview.postUrl(url, EncodingUtils.getBytes(postData, "base64"));
    • mWebView.loadData(htmlString, “text/html”, “utf-8”); // 加载Html数据

      String htmlString = "<h1>Title</h1><p>This is HTML text<br /><i>Formatted in italics</i><br />Anothor Line</p>";
      mWebView.loadData(htmlString, "text/html", "utf-8"); // 加载Html数据
      • loadData()不能加载图片内容,如果要加载图片内容或者获得更强大的Web支持请使用loadDataWithBaseURL()。
      • 显示乱码
        WebView一般为了节省资源使用UTF-8编码,而String类型的数据主要是Unicode编码,
        因此在loadData()的时候需要设置相应编码让其将Unicode编码转成UTF-8但是有些时候设置后还是会出现乱码,这是因为还需要为WebView中的Text设置编码,

        WebView mWebView = (WebView)findViewById(R.id.webview) ;
        String content = getUnicodeContent() ;
        mWebView.getSettings().setDefaultTextEncodingName(“UTF -8”) ;
        mWebView.loadData(content, “text/html”, “UTF-8”) ;
  • 设置WebView基本信息:

    • 如果访问的页面中有Javascript,则webview必须设置支持Javascript。
      webview.getSettings().setJavaScriptEnabled(true);
      • 触摸焦点起作用
        requestFocus() // 如果不设置的话,会出现不能弹出软键盘等问题。
      • 取消滚动条
        this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
  • Back键的处理
    如果用webview点链接看了很多页以后,如果不做任何处理,点击系统Back键,整个浏览器会调用finish()而结束自身,
    如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。

     public boolean onKeyDown(int keyCoder,KeyEvent event){
        if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){
            webview.goBack();   //goBack()表示返回webView的上一页面
            return true;
        }
        return false;
     }
  • WebView中Padding没有效果
    WebView中使用Padding没有效果,我们在WebView外层包上一层布局就会有所改进,但是不能完全解决问题,正确的做法是在WebView的加载css中增加Padding

  • WebViewClient
    如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。
    给WebView添加一个事件监听对象WebViewClient并重写其中的一些方法: shouldOverrideUrlLoading对网页中超链接按钮的响应。
    当按下某个连接时WebViewClient会调用这个方法,并传递按下的url。

    1. 接收到 Http 请求的事件
      onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm)

    2. 打开链接前的事件
      public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; }
      这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。

    3. 载入页面完成的事件
      public void onPageFinished(WebView view, String url){ }
      页面载入完成,于是我们可以关闭loading条,切换程序动作。

    4. 载入页面开始的事件
      public void onPageStarted(WebView view, String url, Bitmap favicon)
      这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。


  • 邮箱 :charon.chui@gmail.com
  • Good Luck!
Flutter 中使用WebView 之webview_flutter插件 推荐系列。 阅读详情

相关推荐

【Flutter】Flutter 如何使用 WebView

在 Flutter 中使用 WebView 的基本方法,以及如何使用 `webview_flutter` 库。

Code Metaverse 7082

【亲测免费】 WKWebView:一款高效、安全的iOS与macOS Web渲染解决方案

WKWebView:一款高效、安全的iOS与macOS Web渲染解决方案 是一个开源项目,为iOS和macOS开发者提供了一种现代且强大的Web内容呈现引擎。该项目基于Apple的WebKit框架,旨在替代早期的UIWebView,以提供更优秀的性能、更好的安全性以及对现代Web标准的支持。 技术分析 WebKit 引擎:WKWebView利用了WebKit的强大功能,这是一个开源的Web浏...

gitblog_00073的博客 1152

【Flutter】WebView webview_flutter

WebView 在移动应用开发中占据了重要的地位,它为开发者提供了在应用中嵌入网页的能力。使用 WebView,你可以轻松地为用户提供丰富的网页内容,或是与第三方平台进行交互,而不需要离开应用界面。

Code Metaverse 1713

golang调用webview,webview2,go-webview2

golang调用webview,webview2,go-webview2

猛犸象 3124

Cadence——原理图相关教程

包含创建文件,原理图,元器件,规则检查,PDF与BOM清单输出,各类PCB网表

haonanyayaya的博客 1万+

Verilog中generate for循环的5个实战技巧(附完整代码示例)

本文详细介绍了Verilog中generate for循环的5个高级实战技巧,包括参数化模块实例化、条件化生成、多维硬件结构实现等,并附有完整代码示例。这些技巧能显著提升FPGA开发效率,特别适合中级Verilog开发者学习应用。

weixin_28725949的博客 187

Android【WebView】

WebView全面解析 简介 WebView是android中一个非常重要的控件,它的作用是用来展示一个web页面。它使用的内核是webkit引擎,4.4版本之后,直接使用Chrome作为内置网页浏览器。 作用 显示和渲染网页; 可与页面JavaScript交互,实现混合开发。 使用介绍 使用WebView之前,不要忘记在清单文件中声明访问网络权限: <uses-permission android:name="android.permission.INTERNET"/> 1、加载页面 加

w_Eternal的博客 1969

ANSYS Maxwell:创建即用型 3D 轴向磁通电机模型

Magnet Length” 是磁体的径向长度。“Magnet Thickness” 是磁体的轴向长度。为了对 AFM 进行更详细的分析,用户需要在 ANSYS Maxwell 中运行 3D FEA 分析。对于 2D 模型,它们类似于 MotorCAD 中的模型,后者对等效的直线电机进行建模。单击“确定”后,将创建一个 3D Maxwell 模型。“长度”是转子铁的轴向长度。然后需要定义定子的“磁芯”尺寸和材料。“长度”是定子铁芯的轴向长度。“转子”# 的极数必须与“定子”中定义的磁极相同。

jkh920184196的博客 1933

webview性能优化—webview预创建

webview性能优化

有图有真相 2845

Overleaf+EndNote+BibTeX:手把手搞定Elsevier期刊投稿的参考文献格式(避坑指南)

本文详细介绍了如何利用Overleaf、EndNote和BibTeX三大工具无缝协作,解决Elsevier期刊投稿中的参考文献格式问题。从工具链配置、文献库导出、BibTeX文件优化到Overleaf集成与编译,提供全流程指南和常见问题解决方案,帮助学术新手高效完成Elsevier期刊投稿。

weixin_30616969的博客 513

网络工程师如何利用Python自动Telnet到N个路由器并执行配置?

telnetlib是Python标准库中的一个模块,专门用于实现Telnet协议。通过telnetlib,我们可以方便地与支持Telnet协议的远程设备进行通信。telnetlib提供了基本的Telnet功能,如连接远程主机、发送命令、读取响应等,使得编写Telnet自动化脚本变得非常简单。文档:可以选择中文:虽然telnetlib的功能相对基础,但对于大多数Telnet操作来说已经足够。通过telnetlib,可以轻松地实现与网络设备的交互,完成自动化配置任务。

网络技术联盟站 299

webview框架

android webView 内核 现在的移动开发,一个明显的趋势是HTML占据了越来越重要的位置,H5不再是简单的一个浏览网页的行为,在非常多的APP中,它承担了许多原本许要原生开发的功能;Android的H5支持则是个比较头痛的事情 在进行IOS开发时,WebView从来都不是问题,在IOS上不仅WebView统一,而且性能极佳,也很少需要考虑兼容性问题; 但这个问题在Android上则表现的非常不一样,由于机型众多,WebView的内核众多,不同手机的WebView的兼容性,性能相差也比.

可爱的小蚊子 2076

机器人中的数值优化(二十一)—— 伴随灵敏度分析、线性方程组求解器的分类和特点、优化软件

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 4206

Android之深入WebView

WebView 目录 思维导图 WebView 的基本使用 WebView WebSettings WebViewClient WebChromeClient WebView 与 JS 交互 Android 去调用 JS 代码 JS 调用 Android 代码 WebView 常见问题汇总 WebView 优化 参考 思维导图 基本使用 WebView 是一个基于 webkit 引擎,展示 web 页面的空间。WebView 在低版本和高版本采用了不同的 webkit 内核版本,4.4 .

hirezy 5627

【Block总结】DiffAttention,差分注意力融入CLIP架构,抑制噪声,增强对相关特征的关注|即插即用

DiffCLIP通过微小的结构改动实现了显著的性能提升,为多模态模型的轻量化与高效化提供了新范式。

AI浩 1563

基于OpenCV和Dlib的头部姿态估计详细教程

本文详细介绍了基于OpenCV和Dlib的头部姿态估计方法。通过分析2D人脸特征点与3D头部模型的对应关系,利用PnP(Perspective-n-Point)算法求解头部在三维空间中的姿态。文章首先阐述了坐标系统转换原理,包括世界坐标系、相机坐标系和图像坐标系的转换关系,随后深入讲解了PnP问题的数学表述及求解步骤,并提供了使用Dlib检测68个面部特征点的代码示例。最后介绍了3D通用头部模型的构建方法,包括6点和14点模型的选择,为计算机视觉中的头部姿态估计提供了完整的技术实现方案。

FJN110的博客 338

[WebView] - Coordinator layout 和 WebView

一、概述我们知道, android-design-support-library 中 CoordinatorLayout提供了对子视图之间的触摸事件的额外级别的控制,这是设计库中许多组件利用的东西。比如floating action buttons、the app bar、Collapsing Toolbars。 其中CoordinatorLayout and the app bar涉及了引用程序

WxSmile 3430

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

webview的postURL以及webview中SessionID同步

webview的postURL//第一步:拼接请求参数 String postData = "username=" + username + "&psw=" + psw + "&time=" + time + "&token=" + token; //第二步:直接postURl webv

Android_Study_OK的博客 3250

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android WebView总结

浏览器控件是每个开发环境都具备的,这为马甲神功提供了用武之地,windows的有webbrowser,android和ios都有webview。只是其引擎不同,相对于微软的webbrowser,android及ios的webview的引擎都是webkit,对Html5提供支持。本篇主要介绍android的webview之强大。 A.webview组件如何使用 1)添加权限:An

hgl868的专栏 2776

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android创建webview,Android Webview总结

这些都是曾经收集到的一些关于Webview的知识,有些工作中用到了,有些暂时还没有用到,这次统一整理下,希望对自己,对大家有所帮助。另外,欢迎大家补充(当然,有错也要指正呀,不胜感激),如果可以的话,我会 更新到本帖中。一.权限二.创建Webview对象WebView webview = new WebView(this);三.加载网页的方式loadData(String data, String...

weixin_29535577的博客 1181

Android WebView最佳优化(WebView池)

前言 说到优化是个老生常谈的话题了,如内存泄露这种,只要遵循一定的编码规则,大部分能避免。本文说下WebView优化,如何大幅提高WebView加载速度。一种可以从设置缓存下手,另一种使用WebView池。本文采用第二种方法,基于X5 WebView优化,这种效果非常明显,给人丝滑般流畅。网上的WebView池方案基本没有考虑视图缓存问题,即复用WebView时,加载新页面,存在历史浏览页面问题。 优化 国际规则,先上代码: ...

Kelly 5134

WebView

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tab1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orienta

进击的小黑哥 1805

android webview_在 Flutter 中使用 WebView

本文示例代码可在微信公众号「01二进制」后台回复「WebView」查看下载前言我们知道在开发 Native App 时经常会有打开网页的需求,可供的选择通常只有两种:在 App 内部打开网页通过调用系统自带浏览器打开网页以「微信」举例,我们在微信内阅读公众号的时候就是第一种情况,但是微信同时也提供了Open with Browser 这一选项,这就是第二种情况了。简单的介绍下 Android 中的...

weixin_39998881的博客 428

[WebView] - WebView leaked

在 Android H 版本之前,WebView存在一个令人恶心的BUG。这个BUG的描述是这样子的: 1,如果传递给WebView的Context引用是 Activity’s Context,当退出这个Activity时,Activity不能被回收导致内存泄漏 2,如果传递给WebView的Context引用是Appliaction’s Context,这个WebView不能被显示dialog

WxSmile 487

Webview

WebView特点:前端界面复用、动态更新、耗电、加载速度慢 WebView使用场景:用户协议(html排版)、广告页、新闻页 JS调用Java方法:网页视频播放 Java调用JS方法:夜间模式 Webview加载Html四种方式: //加载URL webView.loadUrl("http://139.196.35.30:8080/OkHttpTest/apppackage/test...

汪子涵的博客 657
上一篇: Widget简介
下一篇: 安全退出应用程序
CharonChui
博客等级 码龄12年 66粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值