第一步:创建SmiliesEditText类继承EditText如下:
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); } //在编辑框顶部添加图片 public void setDrawableTop(Drawable top) { setCompoundDrawablesWithIntrinsicBounds(null, top, null, null); } //在编辑框顶部添加图片 public void setDrawableTop(int top) { setCompoundDrawablesWithIntrinsicBounds(0, top, 0, 0); } //在编辑框顶部左边图片 public void setDrawableRight(int right) { setCompoundDrawablesWithIntrinsicBounds(0, 0, right, 0); } //在编辑框左边添加图片 public void setDrawableLeft(int left) { setCompoundDrawablesWithIntrinsicBounds(left, 0, 0, 0); } //在编辑框底部添加图片 public void setDrawableButtom(int buttom) { setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, buttom); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } //在编辑框内添加图片或者表情 public void insertIcon(int id) { SpannableString ss = new SpannableString(getText().toString() + "[smile]");//new一个SpannableString里面包含EditText已有内容,另外添加一个字符串[smile]用于在后面替换一个图片 Drawable d = getResources().getDrawable(id); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);//将图片实例化为一个ImageSpan型 ss.setSpan(span, getText().length(), getText().length() + "[smile]".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);//将ImageSpan代替之前添加的[smile]字符串 setText(ss); } }
第二步:设计xml如下:也可以在activity中直接new一个控件出来
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#bfbfbf" > <com.example.widget.SmiliesEditText android:id="@+id/edit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:padding="@dimen/padding_medium" /> </RelativeLayout>
第三步:编写MainActivity类作为演示控件是否实现了需要的功能
import android.app.Activity; import android.os.Bundle; import android.view.Menu; import com.example.widget.SmiliesEditText; public class MainActivity extends Activity { private SmiliesEditText edit; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edit = (SmiliesEditText) this.findViewById(R.id.edit); edit.append("大家好"); edit.setDrawableRight(R.drawable.bottle_close_frame_highlight); edit.insertIcon(R.drawable.e40f); edit.append("哈哈哈"); } }
第四步:运行结果如图: