android textview html font标签不好用

textview可以显示html标签的效果,但是最基本的字体大小,颜色font标签却不好用,根本无法使用设置字体大小,看了下源码原来是个bug,在设置font属性的时候就没有设置字体大小,考虑html还提供自定标签的功能,思路是替换font标签自己解析设置。

用到的接口是Html类TagHandler接口

public class DdbFontHandler implements TagHandler {

	private int startIndex = 0;
	private int stopIndex = 0;

	@Override
	public void handleTag(boolean opening, String tag, Editable output,
			XMLReader xmlReader) {
		processAttributes(xmlReader);
		
		if(tag.equalsIgnoreCase("ddbfont")){
			if(opening){
				startFont(tag, output, xmlReader);
			}else{
				endFont(tag, output, xmlReader);
			}
		}

	}
	
    public void startFont(String tag, Editable output, XMLReader xmlReader) {  
        startIndex = output.length();  
    }  
  
    public void endFont(String tag, Editable output, XMLReader xmlReader){  
        stopIndex = output.length();  
        
        String color = attributes.get("color");
        String size = attributes.get("size");
        size = size.split("px")[0];
        if(!TextUtils.isEmpty(color) && !TextUtils.isEmpty(size)){
	        output.setSpan(new ForegroundColorSpan(Color.parseColor(color)), startIndex, stopIndex,  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
	        output.setSpan(new AbsoluteSizeSpan(Utils.dipToPx(GApp.instance(), Integer.parseInt(size))), startIndex, stopIndex,  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
        }else{
        	output.setSpan(new ForegroundColorSpan(0xff2b2b2b), startIndex, stopIndex,  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
        }
    } 
    
    final HashMap<String, String> attributes = new HashMap<String, String>();

    private void processAttributes(final XMLReader xmlReader) {
        try {
            Field elementField = xmlReader.getClass().getDeclaredField("theNewElement");
            elementField.setAccessible(true);
            Object element = elementField.get(xmlReader);
            Field attsField = element.getClass().getDeclaredField("theAtts");
            attsField.setAccessible(true);
            Object atts = attsField.get(element);
            Field dataField = atts.getClass().getDeclaredField("data");
            dataField.setAccessible(true);
            String[] data = (String[])dataField.get(atts);
            Field lengthField = atts.getClass().getDeclaredField("length");
            lengthField.setAccessible(true);
            int len = (Integer)lengthField.get(atts);

            /**
             * MSH: Look for supported attributes and add to hash map.
             * This is as tight as things can get :)
             * The data index is "just" where the keys and values are stored. 
             */
            for(int i = 0; i < len; i++)
                attributes.put(data[i * 5 + 1], data[i * 5 + 4]);
        }
        catch (Exception e) {
        }
    }

}
这个比较通用,自定义其他标签。网上还有针对这个问题其他思路,也是不错的

http://blog.csdn.net/u010418593/article/details/9322197

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 安卓的TextView组件提供了展示HTML格式代码的功能,使用Html.fromHtml方法可以将HTML格式的字符串转换为Spanned对象,并且可以显示字体样式、颜色、链接等元素。 首先,需要在布局文件中创建一个TextView组件: ``` <TextView android:id="@+id/htmlTextView" android:layout_width="match_parent" android:layout_height="wrap_content" /> ``` 然后,在代码中获取TextView组件的实例,并将HTML代码设置给它: ``` TextView htmlTextView = findViewById(R.id.htmlTextView); String htmlCode = "<b>加粗文本</b>,<font color='#FF0000'>红色文本</font>,<a href='http://www.example.com'>链接文本</a>"; htmlTextView.setText(Html.fromHtml(htmlCode)); ``` 上述代码中,HTML代码包含了加粗文本、红色文本和链接文本。Html.fromHtml方法可以解析这些HTML标签,并将其转换为Spanned对象,随后可以将其设置TextView的文本内容。 需要注意的是,为了支持链接文本,还需要设置TextView的点击事件,使得用户可以点击链接进行跳转: ``` htmlTextView.setMovementMethod(LinkMovementMethod.getInstance()); ``` 这样,就可以通过TextView完美展示HTML格式的代码了。 ### 回答2: 在安卓中,我们可以使用TextView来展示HTML格式的代码。为了实现完美展示,我们可以采取以下步骤: 1. 在XML布局文件中,将TextViewandroid:autoLink属性设置为none,这样可以避免链接被自动点击。 2. 在java代码中,使用Html.fromHtml()方法将HTML格式的代码转换为Spanned对象。 例如,假设我们有一个包含HTML格式代码的字符串myHtmlCode,我们可以使用以下代码将其展示在TextView中: ```java String myHtmlCode = "<b>加粗文字</b> <i>斜体文字</i>"; TextView textView = findViewById(R.id.textView); textView.setText(Html.fromHtml(myHtmlCode)); ``` 3. 如果我们想要自定义HTML样式,可以创建一个Html.TagHandler对象并将其传递给Html.fromHtml()方法的第二个参数。 TagHandler可以用于处理HTML标签,并在需要的地方应用自定义样式。例如,我们可以创建一个自定义的TagHandler来处理特定标记,并为其添加特定的样式。 ```java String myHtmlCode = "这是一个<customtag>自定义标签</customtag>"; TextView textView = findViewById(R.id.textView); textView.setText(Html.fromHtml(myHtmlCode, null, new CustomTagHandler())); ``` 这样,TextView就能够完美展示HTML格式的代码了。请注意,为了正常显示HTML代码,我们还需要确保TextView的宽度和高度足够大,以便完整展示所有内容。 ### 回答3: 要想在安卓TextView中完美展示HTML格式的代码,可以借助Html类和fromHtml()方法来实现。 首先,在代码中找到对应的TextView控件,并设置其文本: TextView textView = findViewById(R.id.textView); textView.setText(Html.fromHtml(htmlString)); 其中,htmlStringHTML格式的字符串,可以包含标签、属性和样式等。接下来,需要对TextView进行一些配置,以确保HTML格式的代码能够正确地展示出来。 1. 支持链接点击: textView.setMovementMethod(LinkMovementMethod.getInstance()); 这样,在TextView中的超链接就可以点击了。 2. 支持自定义字体样式: 可以通过使用SpannableStringBuilder类来实现自定义字体样式,例如设置字体颜色、大小等。 3. 支持图片显示: 如果HTML代码中包含图片,可以使用Html.ImageGetter接口和Spanned类的setSpan()方法来显示图片。 总的来说,通过Html类和TextView的fromHtml()方法,可以将HTML格式的代码转换为可显示的文本,并根据需要对TextView进行进一步的配置,以完美展示HTML格式的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值