• Android 图文混排 通过webview实现并实现点击图片


    在一个开源项目看到是用的webview 实现的
    1. 这是在asset中的一个模板html

    <html>  
        <head>  
            <title>News Detail</title>  
                    <meta name="viewport" content="width=device-width, minimum-scale=0.5, initial-scale=1.2, maximum-scale=2.0, user-scalable=1" />  
            <link rel="stylesheet" type="text/css" href="css.css" />  
             
        </head>  
        <body>  
            <div id="header">  
                <h3>  
                            #title#  
                            </h3>  
                <div class="date">#time#</div>  
            </div>  
            <div id="content">  
                    #content#  
            </div>  
        </body>  
    </html>  

    2.模板的css

    body {  
        font-family: Helvetica, "Microsoft Yahei", Verdana, Helvetica, SimSun,  
            Arial, "Arial Unicode MS", MingLiu, PMingLiu, "MS Gothic", sans-serief;  
        margin: 0;  
        padding: 0 8px;  
        background-color: #efeff0;  
        color: #333;  
        word-wrap: break-word;  
    }  
      
    p {  
        margin-top: 0;  
        margin-bottom: 5pt;  
        line-height: 1.6em;  
    }  
      
    #header {  
        text-align: center;  
        background: transparent url('webBgLine.png') repeat-x scroll center  
            bottom;  
        padding-top: 6pt;  
        margin-bottom: 5pt;  
        -webkit-background-size: 320px 2px;  
    }  
      
    #header h3 {  
        margin-bottom: 0px;  
        margin-top: 5px;  
        font-size: 16pt;  
        padding: 0 5pt;  
        color: #464646;  
        line-height: 1.3em;  
    }  
      
    .date {  
        color: #8e8e8e;  
        font-size: 12pt;  
        padding: 8pt 0;  
    }  
      
    #content {  
        font-size: 14pt;  
        line-height: 1.8;  
    }  
      
    img {  
        max- 310px;  
        height: auto;  
    }  
      
    div.bimg {  
        text-align: center;  
        padding: 0;  
    }  
      
    .photo_title {  
        font-weight: bold;  
        font-size: 16pt;  
        margin-top: 15px;  
    }  
      
    .langs_cn {  
        color: #006200;  
    }  
      
    audio {  
         100%  
    }  
      
    * {  
        -webkit-touch-callout: none;  
        /* prevent callout to copy image, etc when tap to hold */  
        /*-webkit-text-size-adjust: none;*/  
        /* prevent webkit from resizing text to fit */  
        -webkit-tap-highlight-color: rgba(0, 0, 0, 0.15);  
        /* make transparent link selection, adjust last value opacity 0 to 1.0 */  
        /*-webkit-user-select: none; /* prevent copy paste, to allow, change 'none' to 'text' */  
    }  
      
    @media screen and (-webkit-device-pixel-ratio: 2) {  
        #header {  
            background-image: transparent url('webBgLine@2x.png') repeat-x scroll  
                center bottom;  
            -webkit-background-size: 320px 1px;  
        }  
    }  

    3.测试的一个html文件 将来会在网络中获取

    主要的代码

    package com.su.imagetextview;  
      
    import java.io.IOException;  
    import java.io.InputStream;  
      
    import android.app.Activity;  
    import android.content.res.AssetManager;  
    import android.os.Bundle;  
    import android.util.Log;  
    import android.view.GestureDetector.OnGestureListener;  
    import android.view.MotionEvent;  
    import android.view.View;  
    import android.view.View.OnLongClickListener;  
    import android.view.View.OnTouchListener;  
    import android.webkit.WebSettings;  
    import android.webkit.WebView;  
    import android.webkit.WebView.HitTestResult;  
    import android.widget.Toast;  
      
    public class WebViewActitivy extends Activity {  
        private String TAG = "WebViewActitivy";  
        private WebView webView;  
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            setContentView(R.layout.webview);  
            super.onCreate(savedInstanceState);  
            webView = (WebView) findViewById(R.id.news_body_webview_content);  
            webView.getSettings().setDefaultTextEncodingName("utf-8");// 避免中文乱码  
            webView.addJavascriptInterface(this, "javatojs");  
            webView.setScrollBarStyle(0);  
            WebSettings webSetting = webView.getSettings();  
            webSetting.setJavaScriptEnabled(true);  
            webSetting.setNeedInitialFocus(false);  
            webSetting.setSupportZoom(true);  
            webSetting.setCacheMode(WebSettings.LOAD_DEFAULT  
                    | WebSettings.LOAD_CACHE_ELSE_NETWORK);  
      
            try {  
                // 读取来自assets的信息 实际操作 _newsContent 来自网络  
                String _newsContent = getStringFromAssets("test.html");  
                // 这是本地的html模板  
                String htmlContent = getStringFromAssets("NewsDetail.html");  
      
                // 替换文本  
                String newsInfo = "发表时间:" + "19901195" + " 查看:" + "255";  
                String newsTitle = "测试Html图文混排";  
                String LOCAL_PATH = "file:///android_asset/";// 本地html  
                // 替换信息加载到html模板中  
                webView.loadDataWithBaseURL(  
                        LOCAL_PATH,  
                        htmlContent.replace("#title#", newsTitle)  
                                .replace("#time#", newsInfo)  
                                .replace("#content#", _newsContent), "text/html",  
                        "utf-8", null);  
                webView.setOnTouchListener(touchlistener);  
                /**
                 * 长按获取图片地址可以进行放大保存等操作
                 */  
                webView.setOnLongClickListener(new OnLongClickListener() {  
      
                    @Override  
                    public boolean onLongClick(View v) {  
                        HitTestResult hitTestResult = ((WebView) v)  
                                .getHitTestResult();  
                        if (hitTestResult.getType() == HitTestResult.IMAGE_TYPE  
                                || hitTestResult.getType() == HitTestResult.IMAGE_ANCHOR_TYPE  
                                || hitTestResult.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {  
                            Log.e(TAG, "保存这个图片!"  
                                    + hitTestResult.getExtra().toString());  
                        }  
                        return true;  
                    }  
                });  
      
            } catch (Exception e) {  
                // TODO: handle exception  
            }  
      
        }  
      
        /**
         * 只能通过实现这个方法来模拟点击 事件 直接点击没效果
         */  
      
        private OnTouchListener touchlistener = new OnTouchListener() {  
      
            public boolean onTouch(View v, MotionEvent event) {  
                float x = 0, y = 0;  
                switch (event.getAction()) {  
                case MotionEvent.ACTION_DOWN:  
                    x = (int) event.getRawX();  
                    y = (int) event.getRawY();  
                    break;  
      
                case MotionEvent.ACTION_UP:  
                    if (x - event.getX() < 5 && y - event.getY() < 5) {  
                        HitTestResult hitTestResult = ((WebView) v)  
                                .getHitTestResult();  
                        if (hitTestResult.getType() == HitTestResult.IMAGE_TYPE  
                                || hitTestResult.getType() == HitTestResult.IMAGE_ANCHOR_TYPE  
                                || hitTestResult.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {  
                            Log.e(TAG, "保存这个图片!"  
                                    + hitTestResult.getExtra().toString());  
                            Toast.makeText(  
                                    WebViewActitivy.this,  
                                    "保存这个图片!" + hitTestResult.getExtra().toString(),  
                                    10).show();  
                        }  
                    }  
      
                    break;  
                }  
      
                return false;  
            }  
      
        };  
      
        String getStringFromAssets(String path) throws IOException {  
            AssetManager assetManager = getAssets();  
            InputStream inputStream = assetManager.open(path);  
            return inputStream2String(inputStream);  
      
        }  
      
        public static String inputStream2String(InputStream in) throws IOException {  
            StringBuffer out = new StringBuffer();  
            byte[] b = new byte[4096];  
            for (int n; (n = in.read(b)) != -1;) {  
                out.append(new String(b, 0, n));  
            }  
            return out.toString();  
        }  
    }  

    上图

    代码:这里

  • 相关阅读:
    String和stringbuffer
    项目中Orcale存储过程优化记录
    大数据项目中的Oracle查询优化
    洛谷P3402 可持久化并查集
    Gym
    CodeForces
    Gym
    Gym
    UVA
    Kattis
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4206336.html
Copyright © 2020-2023  润新知