在android中显示图像和html内容的最佳视图

时间:2012-07-23 11:36:12

标签: java android android-layout android-webview

*我正在开发一个可以阅读电子邮件的应用程序。我正在使用textview / edittext来显示邮件。现在我能够以字符串形式获取电子邮件内容并显示它。 但哪个是显示带有HTML内容和图像的电子邮件的最佳视图? 请帮帮我。 谢谢 :) 编辑: 我使用了S.O.建议的webview。朋友们(感谢@Andro Selva,@ CFlex)。 但我面临一个问题,它显示电子邮件的主体两次! :( 一次作为text / plain再次作为Text / html。 its a screeshot of webview loaded with email message when a blank mail is sent 我已尝试使用以下代码加载webview。

webViewBody.loadData(details[3], "text/html", "UTF-8");
//webViewBody.loadDataWithBaseURL(null, details[3] , "text/html", "utf-8", null);

这里的详细信息[3]是电子邮件内容。 我在这里缺少什么!? :(请帮帮我。

EDITED: 我已经添加了用于获取以下信息内容的代码。

    public void getContent(Message msg)
{
     try
     {
        Object o = msg.getContent();
            if (o instanceof String) 
        {
        if(((String) o).equalsIgnoreCase(""))
        {
        }
                    else
        {
           messageBody = (String)o+"STRING!!";
        }
       }
       else if (o instanceof Multipart) 
       {
        Multipart mp = (Multipart)o;
            int count3 = mp.getCount();
        for (int j = 0; j < count3-1; j++)
        {
            // Part are numbered starting at 0
            BodyPart b = mp.getBodyPart(j);
            Object o2 = b.getContent();
            if (o2 instanceof String) 
            {
                if(((String) o).equalsIgnoreCase(""))
                {
                }
                                    else
                {
                    messageBody = (String)o2+"MULTIPART!!"; 
                }
            }
        } //End of for
       }
       else if (o instanceof InputStream) 
       {
        //System.out.println("**This is an InputStream message**");
        InputStream is = (InputStream)o;
        // Assumes character content (not binary images)
                    //messageBody = convertStreamToString(is)+"INPUT STREAM!!";
            int c;
                    while ((c = is.read()) != -1) 
                    {
                    messageBody = convertToString(is)+"INPUT STREAM!!";
                System.out.println(messageBody);
                    }
       }
    }
        catch (Exception ex)
    {
    System.out.println("Exception arise at get Content");
    ex.printStackTrace();
    }

    //TODO TEST CODES
    try
    {
        String contentType = msg.getContentType();
        //          System.out.println("Content Type : " + contentType);
        Multipart mp = (Multipart) msg.getContent();
        int count = mp.getCount();
        for (int i = 0; i < count; i++)
        {
            dumpPart(mp.getBodyPart(i));
        }
    }
    catch (Exception ex)
    {
        System.out.println("Exception arise at get Content");
        ex.printStackTrace();
    }
}

public String convertToString(InputStream inputStream)
{
    StringBuffer string = new StringBuffer();
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    String line;
    try 
    {
        while ((line = reader.readLine()) != null) 
        {
            string.append(line + "\n");
        }
    }
    catch (IOException e) 
    {
    }
    return string.toString();
}   

控件始终是“else if(o instanceof InputStream)”条件。所以它的流式电子邮件总是显示完整的电子邮件内我在这里缺少什么?

4 个答案:

答案 0 :(得分:2)

我认为您需要实现WebView,因为它可以格式化html AND 显示图片。

AFAIK,带有html的textView可以格式化内容,但无法显示图像。

修改: 以下应该有效:

webViewBody.loadData(details[3], "text/html", null);

答案 1 :(得分:2)

可能您正在显示可以由同一电子邮件中的html和纯文本内容组成的所有电子邮件内容。 这是因为这种电子邮件是多部分内容,你需要拆分它,你还需要分离附件和图像(嵌入式) 查看您的“详细信息”是否未返回多部分内容正文。

答案 2 :(得分:2)

由于你写了两次,细节会显示两次:

webViewBody.loadData(details[3], "text/html", "UTF-8");
webViewBody.loadDataWithBaseURL(null, details[3] , "text/html", "utf-8", null);

可能的解决方案:使用loadData()loadDataWithBaseURL()

答案 3 :(得分:1)

添加这些行解决了这个问题!

    MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
    mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
    mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
    mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
    mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
    mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
    CommandMap.setDefaultCommandMap(mc);

感谢所有帮助我解决这个问题的人。 :)