android EditText 添加图片表情以及在四个方向上绘制图片
16lz
2021-01-23
第一步:创建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);}@Overrideprotected 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);}@Overrideprotected 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("哈哈哈"); } }
第四步:运行结果如图:
更多相关文章
- Android Base64字符串转换成图片
- Android控件笔记——在界面中显示图片
- Android 下载图片的问题
- Android View转换成图片保存
- Unity调用Android保存图片到相册
- Android图片压缩
- 【Android】android图片轮播
- Android:EditText插入图片实现图文混排
- Android之GLES2.0显示图片测试代码