今天遇到一个问题:需要在Android 客户端控制webview网页中字体的大小,webview加载的内容是从服务端获取的html片段,我们知道webview,可以直接加载html片段

(mWebView.loadDataWithBaseURL(null, news.getContent(), "text/html", "utf-8", null);) /**         * mWebView.loadData(news.getContent(), "text/html", "utf-8");//不能用这种,会有乱码         */

然后我们需要修改字体大小。可以根据

/**  * webview  */ WebView wv; /**  * Manages settings state for a WebView  */ WebSettings settings; /**  * 用来控制字体大小  */ int fontSize = 1;wv = (WebView) findViewById(R.id.webViewContent);  settings = wv.getSettings();  settings.setSupportZoom(true);if (settings.getTextSize() == WebSettings.TextSize.SMALLEST) {   fontSize = 1;  } else if (settings.getTextSize() == WebSettings.TextSize.SMALLER) {   fontSize = 2;  } else if (settings.getTextSize() == WebSettings.TextSize.NORMAL) {   fontSize = 3;  } else if (settings.getTextSize() == WebSettings.TextSize.LARGER) {   fontSize = 4;  } else if (settings.getTextSize() == WebSettings.TextSize.LARGEST) {   fontSize = 5;  }/**     * 设置底部按钮的事件     */    private void setImageViewClick() {        /**         * 缩小按钮         */        imgViewSX.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                fontSize--;                if (fontSize < 0) {                    fontSize = 1;                }                switch (fontSize) {                case 1:                    settings.setTextSize(WebSettings.TextSize.SMALLEST);                    break;                case 2:                    settings.setTextSize(WebSettings.TextSize.SMALLER);                    break;                case 3:                    settings.setTextSize(WebSettings.TextSize.NORMAL);                    break;                case 4:                    settings.setTextSize(WebSettings.TextSize.LARGER);                    break;                case 5:                    settings.setTextSize(WebSettings.TextSize.LARGEST);                    break;                }            }        });        /**         * 放大按钮         */        imgViewFD.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                fontSize++;                if (fontSize > 5) {                    fontSize = 5;                }                switch (fontSize) {                case 1:                    settings.setTextSize(WebSettings.TextSize.SMALLEST);                    break;                case 2:                    settings.setTextSize(WebSettings.TextSize.SMALLER);                    break;                case 3:                    settings.setTextSize(WebSettings.TextSize.NORMAL);                    break;                case 4:                    settings.setTextSize(WebSettings.TextSize.LARGER);                    break;                case 5:                    settings.setTextSize(WebSettings.TextSize.LARGEST);                    break;                }            }        });

但是这种方式只能用android自带的五种字体大小:
SMALLEST(50%),
SMALLER(75%),
NORMAL(100%),
LARGER(150%),
LARGEST(200%);
如果前台的界面比较复杂的情况下,,像新闻类的。我们会事先在项目的assets目录下,创建一个模板,然后从服务器拿到数据,填充。当然,你可以让你们公司的后台给你写好模板,和样式。然后你直接调用就可以了。那么我们会遇到一个问题,就是修改字体大小,因为可能模板里面或者是从服务器拿到的html片段里面已经有个行样式

<p style="font-size: 10px;font-family:宋体 ;color: #ccc "> 这是有行样式的数据p>

类似这种,那么。你再通过js去修改这个p的文字大小是不会起作用的。。。我问了下前段。。他们说因为行内样式不能通过添加类名修改,换个角度理解就是,行内样式的优先级比外链的样式大。。。那问题来了。。我就是要修改。。有没有办法。当然有的。

//Activity:这就是填充方法,填充的内容就是服务器的html片段,填充完毕//后,再循环查找p标签,然后修改里面的字体。。  contentWebView                .loadUrl("javascript:tianchongcontentstr('"                        + replaceBlank2(str) + "')"); html: <html>    <head>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">            <title>无标题文档title>        <link rel="stylesheet" href="newsWhite.css">                <script type="text/javascript">                function tianchongcontentstr(contentstr){                    document.getElementById("contentstr").innerHTML = contentstr;                    var objs=document.getElementsByTagName("p");                     for (var i = 0; i < objs.length; i++) {                        objs[i].className="xieyi1";                     }                }                    script>                head>    <body id="body">            <div class="N_xq wh mr">                <div    id="contentstr" >                div>            div>                        body>html>//然后js文件:@charset "utf-8";*{margin:0;padding:0;}.xieyi1{font-size:14pt !important;}.xieyi4{font-size:24px;}.xieyi5{font-size:27px;}

重点就是 !important这个。。这个就是声明了优先级最大。。。可以覆盖行样式里面的内容,,,至此。。就解决了。。.

每日语录:
假如我不曾见过太阳,我就可以忍受黑暗。。。加油!!!!

更多相关文章

  1. Hi3716C Android(安卓)SDK编译说明
  2. 【flutter】Running Gradle task 'assembleDebug' android 首次
  3. android 修改launcher行数和列数的方法
  4. Android自定义RadioGroup
  5. Android快速开关机
  6. Android(安卓)刷新页面更新数据方法探究
  7. Android(安卓)ViewPager事件滑动监听修改
  8. Android设置锁屏/休眠时长
  9. Android(安卓)Studio Git 修改用户名、密码、URL

随机推荐

  1. Android开发:Android(安卓)Studio发布
  2. Android(安卓)SDK 2.0安装、配置图文教程
  3. TabHost和android:layout_height="0.0dip
  4. Android异步操作----AsyncTask类
  5. Android(安卓)使用WebView加载含有echart
  6. Android架构分析之Android智能指针(二)
  7. Android(安卓)最火的快速开发框架XUtils
  8. Android(安卓)Project from Existing Cod
  9. Android图形显示系统(一)
  10. Ubuntu for Android:共享同一linux内核,运