android 基础知识二

本文介绍如何在 Android 的 TextView 中实现部分文字点击事件及显示 HTML 内容中的图片。通过自定义 URLSpan 和 ImageGetter 实现局部文字响应点击事件,并通过 WebView 显示 HTML 图片,避免程序卡顿。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android TextView上响应部分文字的事件
运行结果如下:

20111010102814.jpg (4.72 KB, 下载次数: 0)

下载附件  保存到相册

2012-10-12 16:51 上传

   

20111010102830.jpg (4.77 KB, 下载次数: 0)

下载附件  保存到相册

2012-10-12 16:51 上传


TtActivity.java

  1. public class TtActivity extends Activity {
  2.     /* * Called when the activity is first created. */
  3.     private TextView tv;
  4.     static Context ctx = null;
  5.   
  6.     @Override
  7.     public void onCreate(Bundle savedInstanceState) {
  8.         super.onCreate(savedInstanceState);
  9.         setContentView(R.layout.main);
  10.         ctx = this;
  11.         tv = (TextView) findViewById(R.id.tv);
  12.         // String htmlLinkText=
  13.         // " <a href=\"http://www.android-study.com/\"><u>Android学习网</u></a>";
  14.         // tv.setText(Html.fromHtml(htmlLinkText));
  15.         tv.setMovementMethod(LinkMovementMethod.getInstance());
  16.         CharSequence text = tv.getText();
  17.         if (text instanceof Spannable) {
  18.             int end = text.length();
  19.             Spannable sp = (Spannable) tv.getText();
  20.             URLSpan[] urls = sp.getSpans(0, end, URLSpan.class);
  21.             SpannableStringBuilder style = new SpannableStringBuilder(text);
  22.             style.clearSpans(); // should clear old spans
  23.             for (URLSpan url : urls) {
  24.                 MyURLSpan myURLSpan = new MyURLSpan(url.getURL());
  25.                 style.setSpan(myURLSpan, sp.getSpanStart(url),
  26.                         sp.getSpanEnd(url), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  27.             }
  28.             tv.setText(style);
  29.         }
  30.     }
  31.   
  32.     private static class MyURLSpan extends ClickableSpan {
  33.         private String mUrl;
  34.   
  35.         MyURLSpan(String url) {
  36.             mUrl = url;
  37.         }
  38.   
  39.         @Override
  40.         public void onClick(View widget) {
  41.             // TODO Auto-generated method stub
  42.             Toast.makeText(ctx, "" + mUrl, Toast.LENGTH_SHORT).show();
  43.         }
  44.     }
  45. }
复制代码
main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:orientation="vertical"
  4.     android:layout_width="fill_parent"
  5.     android:layout_height="fill_parent">
  6.     <TextView
  7.         android:id="@+id/tv"
  8.         android:layout_width="fill_parent"
  9.         android:layout_height="wrap_content"
  10.         android:text="@string/hello" />
  11. </LinearLayout>
复制代码
strings.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.     <string name="hello">局部事件1  <a href="1" ><u>hello1</u></a>,事件2<a href="2" ><u>hello2</u></a></string>
  4.     <string name="app_name">Tt</string>
  5. </resources>
复制代码
Android TextView中显示HTML和图片
如何在 Android TextView 中显示<img src=""/> html标签内的图片,大家都知道,在TextView中 显示HTML 内容的方法如下所示:

  1. [size=3]TextView description=(TextView)findViewById(R.id.description);
  2. description.setText(Html.fromHtml(item.getDescription()));[/size]
复制代码
如果HTML中有图片的话,显示出来的图片会被一个小框取代,那么怎么样才能看到图片呢?查看了一下API,android.text.Html还还有另一个方法:Html.fromHtml(String source,ImageGetter imageGetter,TagHandler tagHandler),这个方法使用如下所示:

  1. ImageGetter imgGetter = new Html.ImageGetter() {
  2.     public Drawable getDrawable(String source) {
  3.         Drawable drawable = null;
  4.         Log.d("Image Path", source);
  5.         URL url;
  6.         try {
  7.             url = new URL(source);
  8.             drawable = Drawable.createFromStream(url.openStream(), "");
  9.         }
  10.         catch (Exception e) {
  11.             return null;
  12.         }
  13.         drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
  14.         return drawable;
  15.     }
  16. };
  17. .........
  18. TextView description=(TextView)findViewById(R.id.description);
  19. description.setText(Html.fromHtml(item.getDescription(),imgGetter,null));
复制代码
第二个参数TagHandler是处理HTML中的标签的,比如说遇到某个标签就把它替换为….之类的操作都可以通过TagHandler来处理

最后我要说的是,如果你的图片是从网络上获取的,那么你一定不要用这种方法显示一张图片,因为这是最垃圾的办法,你的程序会经常被卡死。

建议您可以使用WebView来显示HTML内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值