我已经阅读了很多关于从android发送html电子邮件的限制。发送html电子邮件的所有建议似乎只是将Html.fromHtml(yourHtmlString)传递给意图为Intent.EXTRA_TEXT。这适用于一些基本标签 - 粗体,斜体 - 但对于像html表这样的任何东西都没有。
看起来您可以尝试扩展Html的某些功能或实现自己的标签处理程序,但我想知道是否没有更基本的限制会迫使您做一些完全不同的事情(比如邮件) api或者什么)。
我之所以建议这是因为,就意图本身所知,Html.fromHtml(blah)只是一个charsequence,如果你在这个对象的charsequence接口上调用方法,你就不会看到任何html的东西(至少我没有)。所有的html / tag东西似乎都被包含在Html.fromHtml实际返回的SpannableStringBuilder中...我想知道gmail应用程序是否在封面下查看真正的charsequence然后可以处理几个标签,这意味着没有希望在你的应用程序的任何方面做任何事情来获取/欺骗gmail应用程序来处理比粗体,斜体等更复杂的事情。
我查看了gmail应用实际发送的原始电子邮件,它会自动发送没有标签的text / plain和带有有限数量标签的text / html版本。我甚至尝试坚持使用一些转义的html标签,这些标签可能最终会转换为电子邮件的text / html部分中的实际标签,但是他们仍然逃脱了...这当然会有点hacky。
无论如何,对于任何可能已经对此进行过调查的人,我想进一步确认默认的android"发送html电子邮件"功能会使你疯狂地接近你可能需要的东西,但最终你必须咬紧牙关并自己实施许多低级别的东西(例如Sending Email in Android using JavaMail API without using the default/built-in app,这意味着你'我必须处理pw的东西等)。
注意(稍后): 我将从Html.fromHtml返回的SpannableStringBuilder与一个扩展SpannableStringBuilder的自定义类包装起来,并将其传递给意图侦听对Spanned接口的调用。事实证明,当事件被写入发送到电子邮件意图的包裹时,TextUtils.writeToParcel会通过首先检查CharSequence是否是Spanned的实例来进行一些特殊检查以根除粗体/斜体,然后要求跨度(通过spanned.getSpans)。尽管如此,我认为在进行修改时没有明显的希望来获得像在那里处理的table / td标签一样简单的东西。我甚至尝试修改我的SpannableStringBuilder子类的toString()来返回一些原始表格html以查看会发生什么,但它会在包裹编写过程中从其他地方转义。
以及更多(稍后): 如果cs是" Spanned"的实例,则TextUtils.writeToParcel(CharSequence cs,Parcel p,...)将仅在它们实现" ParcelableSpan"时写入这些跨度。 interface ...这是"一种特殊的Parcelable,用于作为文本跨度的对象"和#34;只能由框架中的代码使用;它不适用于应用程序实现自己的Parcelable跨度"。所以,即使你想要挂钩并编写自己来处理表标签或其他什么,似乎也不鼓励。男人,我希望hackbod在这里能够说明我错过的一些东西。
答案 0 :(得分:11)
这适用于一些基本标签 - 粗体,斜体 - 但不适用于html表格。
这很可能是电子邮件客户端的功能。并非所有电子邮件客户端都可以在任何平台上创建任意HTML。因此,虽然Mozilla Thunderbird似乎允许您使用表格创建HTML邮件,但Gmail不会(至少,我没有在邮件撰写窗口中看到它的选项)。
我想知道是否没有更基本的限制会迫使你做一些完全不同的事情
除非您编写自己的电子邮件客户端,否则需要扩展允许TextView
和EditText
处理HTML表所需的几个类(它的方式不仅仅是{{1}对你没有好处。
我想知道gmail应用程序是否在封面下查看真正的charsequence然后可以处理几个标签
Html
和TextView
可以“处理几个标记”,大致排列EditText
可以解析/生成的内容和Html
可以表示的内容。
这些都不能处理HTML表格。也不是JavaScript。也不是CSS。也不SpannedString
或任意数量的其他标签。
但最终你必须咬紧牙关并自己实施许多低级别的东西
我首先要问自己,直接从手机发送带有表格的HTML邮件是否值得。您可以使用Web服务接口从服务器发送带有表的HTML邮件,也可以从手机发送HTML邮件无表。这些都不会要求你收集“pw stuff”。