您的位置:首页 > 其它

在TextView中显示表情图像和文本

2014-04-01 18:15 253 查看
像QQ一样输入表情图像

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="#FFF" />

</LinearLayout>


package com.example.android_textview2;

import java.lang.reflect.Field;

import android.R.integer;
import android.R.string;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.text.Html;
import android.text.Html.ImageGetter;
import android.text.method.LinkMovementMethod;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

	/**
	 * 资源名称获取资源id
	 * */
	public int getSourceId(String name) {
		try {
			// 根据资源的ID的变量名获得Field的对象,使用反射机制来实现的
			Field field = R.drawable.class.getField(name);
			// 取得并返回资源的id的字段(静态变量)的值,使用反射机制
			return Integer.parseInt(field.get(null).toString());
		} catch (Exception e) {
		}
		return 0;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		TextView textView = (TextView) this.findViewById(R.id.textview);
		textView.setTextColor(Color.BLUE);
		textView.setBackgroundColor(Color.WHITE);
		textView.setTextSize(20);
		//html图像3后换行<p>
		String html = "图像1<img src = 'image1'/>图像2<img src = 'image2'/>图像3<img src = 'image3'/><p>";
		//图像4超链接www.baidu.com
		html += "图像4<a href='http://www.baidu.com'><img src = 'image4'/></a>图像5<img src='image5'/>";
		
		CharSequence charSequence= Html.fromHtml(html, new ImageGetter() {
			
			@Override
			public Drawable getDrawable(String source) {
				// 获取系统资源信息
				Drawable drawable = getResources().getDrawable(getSourceId(source));
				//第三图片缩小
				if(source.equals("image3"))
				{
					drawable.setBounds(0, 0, drawable.getIntrinsicWidth()/2, drawable.getIntrinsicWidth()/2);
				}
				else
				{
					drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicWidth());
				}
				return drawable;
			}
		}, null);
		textView.setText(charSequence);//TextView设置显示html
		textView.setMovementMethod(LinkMovementMethod.getInstance());//产生超连接
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		// String tempString="image1";
		// findViewById(R.drawable.tempString)
		return true;
	}

}


主要知识点

1.根据资源名称获取资源id

2.android支持html两个接口

Spanned android.text.Html.fromHtml(String source)

Spanned android.text.Html.fromHtml(String source,
ImageGetter imageGetter,
TagHandler tagHandler)


参数[b]source需要处理的html文本[/b]

参数[b]imageGetter对图像进行处理接口[/b]

参数[b]tagHandler对标签进行处理,不使用可为null[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: