发布
社区首页 >问答首页 >Html列表标签在android文本视图中不起作用。我能做什么?

Html列表标签在android文本视图中不起作用。我能做什么?
EN

Stack Overflow用户
提问于 2010-06-30 22:50:34
回答 9查看 77.5K关注 0票数 105

Html列表标签在android TextView中不起作用。这是我的字符串内容:

代码语言:javascript
代码运行次数:0
复制
String str="A dressy take on classic gingham in a soft, textured weave of stripes that resembles twill.  Take a closer look at this one.<ul><li>Trim, tailored fit for a bespoke feel</li><li>Medium spread collar, one-button mitered barrel cuffs</li><li>Applied placket with genuine mother-of-pearl buttons</li><li>;Split back yoke, rear side pleats</li><li>Made in the U.S.A. of 100% imported cotton.</li></ul>";

我将其加载到文本视图中,如下所示:

代码语言:javascript
代码运行次数:0
复制
textview.setText(Html.fromHtml(str));

输出看起来像一个段落。我能做什么?有什么解决方案吗?

编辑:

代码语言:javascript
代码运行次数:0
复制
webview.loadData(str,"text/html","utf-8");
EN

回答 9

Stack Overflow用户

发布于 2012-03-11 03:17:30

对Aman Guatam代码的一个小修复。上面的函数在渲染换行符时有问题。例如:如果之前的<li>标签是一个<p>标签,则会呈现2个换行符。下面是升级后的代码:

代码语言:javascript
代码运行次数:0
复制
import org.xml.sax.XMLReader;

import android.text.Editable;
import android.text.Html.TagHandler;

public class ListTagHandler implements TagHandler {
    boolean first = true;

    @Override
    public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {

        // TODO Auto-generated method stub
        if (tag.equals("li")) {
            char lastChar = 0;
            if (output.length() > 0)
                lastChar = output.charAt(output.length() - 1);
            if (first) {
                if (lastChar == '\n')
                    output.append("\t•  ");
                else
                    output.append("\n\t•  ");
                first = false;
            } else {
                first = true;
            }
        }
    }
}
票数 25
EN

Stack Overflow用户

发布于 2013-04-23 20:35:29

使用LeadingMarginSpan的不同解决方案。处理有序和无序列表以及嵌套。

代码语言:javascript
代码运行次数:0
复制
public class ListTagHandler implements TagHandler
{
    private int                 m_index     = 0;
    private List< String >  m_parents   = new ArrayList< 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 )
            {
                m_parents.add( tag );
            }
            else m_parents.remove( tag );

            m_index = 0;
        }
        else if( tag.equals( "li" ) && !opening ) handleListTag( output );
    }

    private void handleListTag( Editable output )
    {
        if( m_parents.get(m_parents.size()-1 ).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 * m_parents.size( ) ), start, output.length( ), 0 );
        }
        else if( m_parents.get(m_parents.size()-1).equals( "ol" ) )
        {
            m_index++ ;

            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, m_index + ". " );
            output.setSpan( new LeadingMarginSpan.Standard( 15 * m_parents.size( ) ), start, output.length( ), 0 );
        }
    }
}
票数 9
EN

Stack Overflow用户

发布于 2011-06-08 04:26:31

如果你只需要格式化一个列表,保持它简单,在你的TextView中复制/粘贴一个unicode字符就可以达到同样的效果。

·Unicode字符'BULLET‘(U+2022)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3150400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档