android EditText 添加图片表情以及在四个方向上绘制图片
第一步:创建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("哈哈哈");
}
}
第四步:运行结果如图: