main.xml
<?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" > <com.javen.smile.SmiliesEditText android:id="@+id/EditText1" android:layout_width="fill_parent" android:layout_height="100px" android:singleLine="true" android:text="HelloWorld" android:textSize="25sp" /> </LinearLayout>
mainActivity
package com.javen.smile; import com.javen.smile.R; import android.app.Activity; import android.os.Bundle; public class main extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); SmiliesEditText et=(SmiliesEditText)findViewById(R.id.EditText1); et.insertIcon(R.drawable.smile); System.out.println(et.getText().toString()); } }
自定義的SmiliesEditText
package com.javen.smile; import android.content.Context; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.text.Spannable; import android.text.SpannableString; import android.text.style.ImageSpan; import android.util.AttributeSet; import android.widget.EditText; public class SmiliesEditText extends EditText { public SmiliesEditText(Context context) { super(context); } public SmiliesEditText(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } public void insertIcon(int id) { // SpannableString連續的字符串,長度不可變,同時可以附加一些object;可變的話使用SpannableStringBuilder,參考sdk文檔 SpannableString ss = new SpannableString(getText().toString()+ "[smile]"); // 得到要顯示圖片的資源 Drawable d = getResources().getDrawable(id); // 設置高度 d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); // 跨度底部應與周圍文本的基線對齊 ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); // 附加圖片 ss.setSpan(span, getText().length(), getText().length() + "[smile]".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); setText(ss); } }