- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在开发一个 Android 应用程序,我需要将 HTLM(也是
java.lang.RuntimeException: PARAGRAPH span must start at paragraph boundary
我试图了解原因,但一直未能找到解决方案。我是 Android 的新手,所以请帮助我。
public class HtmlTagHandler implements Html.TagHandler {
private int mListItemCount = 0;
private Vector<String> mListParents = new Vector<String>();
@Override
public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) {
if (tag.equals("ul") || tag.equals("ol") || tag.equals("dd")) {
if (opening) {
mListParents.add(tag);
} else mListParents.remove(tag);
mListItemCount = 0;
} else if (tag.equals("li") && !opening) {
handleListTag(output);
}
}
private void handleListTag(Editable output) {
if (mListParents.lastElement().equals("ul")) {
output.append("\n");
String[] split = output.toString().split("\n");
int lastIndex = split.length - 1;
int start = output.length() - split[lastIndex].length() - 1;
output.setSpan(new BulletSpan(15 * mListParents.size()), start, output.length(), 0);
} else if (mListParents.lastElement().equals("ol")) {
mListItemCount++;
output.append("\n");
String[] split = output.toString().split("\n");
int lastIndex = split.length - 1;
int start = output.length() - split[lastIndex].length() - 1;
output.insert(start, mListItemCount + ". ");
output.setSpan(new LeadingMarginSpan.Standard(15 * mListParents.size()), start, output.length(), 0);
}
}
}
最佳答案
发现错误,添加这个if(start<output.length())
就解决了之前
output.setSpan()
正确的工作代码是这样的:
public class HtmlTagHandler implements Html.TagHandler {
private int mListItemCount = 0;
private Vector<String> mListParents = new Vector<String>();
@Override
public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) {
if (tag.equals("ul") || tag.equals("ol") || tag.equals("dd")) {
if (opening) {
mListParents.add(tag);
} else mListParents.remove(tag);
mListItemCount = 0;
} else if (tag.equals("li") && !opening) {
handleListTag(output);
}
}
private void handleListTag(Editable output) {
if (mListParents.lastElement().equals("ul")) {
output.append("\n");
String[] split = output.toString().split("\n");
int lastIndex = split.length - 1;
int start = output.length() - split[lastIndex].length() - 1;
if(start<output.length())
output.setSpan(new BulletSpan(15 * mListParents.size()), start, output.length(), 0);
} else if (mListParents.lastElement().equals("ol")) {
mListItemCount++;
output.append("\n");
String[] split = output.toString().split("\n");
int lastIndex = split.length - 1;
int start = output.length() - split[lastIndex].length() - 1;
output.insert(start, mListItemCount + ". ");
if(start<output.length())
output.setSpan(new LeadingMarginSpan.Standard(15 * mListParents.size()), start, output.length(), 0);
}
}
}
更新:
在使用上面的代码遇到一些其他问题后,我开发了这段代码,它无一异常(exception)地工作,我希望它会有用。
public class HtmlTagHandler implements Html.TagHandler {
private int mListItemCount = 0;
private Vector<String> mListParents = new Vector<String>();
private Vector<Integer> mListCounter = new Vector<Integer>();
@Override
public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) {
if (tag.equals("ul") || tag.equals("ol") ) {
if (opening) {
mListParents.add(mListParents.size(),tag);
mListCounter.add(mListCounter.size(), 0);
} else {
Log.d("Bohhh"," tolgo "+mListParents.get(mListParents.size()-1));
mListParents.removeElementAt(mListParents.size()-1);
Log.d("Bohhh","lunghezza "+mListParents.size());
mListCounter.removeElementAt(mListCounter.size()-1);
}
} else if (tag.equals("li") && opening) {
handleListTag(output);
}
}
private void handleListTag(Editable output) {
if (mListParents.lastElement().equals("ul")) {
if(output.length()!=0)
output.append("\n");
for(int i=1;i<mListCounter.size();i++)
output.append("\t");
output.append("• ");
} else if (mListParents.lastElement().equals("ol")) {
mListItemCount= mListCounter.lastElement()+1;
if(output.length()!=0)
output.append("\n");
for(int i=1;i<mListCounter.size();i++)
output.append("\t");
output.append( mListItemCount + ". ");
mListCounter.removeElementAt(mListCounter.size()-1);
mListCounter.add(mListCounter.size(), mListItemCount);
}
}
}
关于java - Android TagHandler 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26912837/
我正在使用 TextView 来显示 HTML 字符串,例如: "测试 HTML link1 link2" 如您所见,我需要处理两种不同类型的标签,因此我需要能够处理这两种不同类型的标签并读取 hre
我正在尝试使用 TextView 显示带有自定义标签的字符串文本: 字符串: "text1 paddingtext2" 其中 articlelink 是自定义标签。我使用自定义的 HTML.TagHa
我正在开发一个 Android 应用程序,我需要将 HTLM(也是 标签)显示到一个 textView 中。为此,我找到了这个 TagHandler但它提出了一个 java.lang.RuntimeE
我正在尝试使用 TextView 显示 HTML。我的 HTML 包含一些 CSS 样式。这是我的 HTML 示例。 bold italic underlined striked
我正在尝试为留言板构建一个 android 应用程序。为了显示帖子内容的格式化 html,我选择了 TextView 和 Html.fromHtml() 方法。不幸的是,这仅涵盖了几个 html 标签
我有一个 TextView,我想为它设置 HTML: HTML.fromHTML(); 但是我想过滤掉所有的带有标记处理程序的标记,我想将所有链接 (src) 保存在列表数组中。这可能吗? 谢谢
我正在尝试将列表( 、 )添加到 TextView。通常你用 将 HTML 加载到 TextView textview.setText(Html.fromHtml("some String wit
我正在扩展 Android TagHandler 类来处理 TextField 中的自定义 html 标签。到目前为止一切顺利,我能够拦截标签并将自定义功能分配给这些标签的“onClick()”。但是
我正在使用 Html.fromHtml() 解析 html。我的问题是我的 html 文本有 youtube 嵌入链接(基本上是 标签) 所以,因为 Html类不支持 标签,我需要定义自己的 Tag
我有一个在 Jboss 6 上使用 Primefaces 3.5 和 Omnifaces 1.5 的应用程序,使用 myfaces 2.1.5 关于尝试使用 o:converter我收到以下错误。 o
我想创建一个表单,我可以在其中编辑我类(class)的字段TagHandler . 所以我决定作为参数传递给表单的构造函数 TagHandler tag在哪里 tag - 是我要编辑的标签。在我的表单
我是一名优秀的程序员,十分优秀!