第一步:创建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("哈哈哈");    }    }

第四步:运行结果如图:


更多相关文章

  1. Android实现局部图片滑动指引效果
  2. Android基于Window.ID_ANDROID_CONTENT给定id添加子View
  3. android EditText 添加图片表情以及在四个方向上绘制图片
  4. ImageView.setScalType参数详解
  5. Android获取本机Mac地址和IP地址
  6. Android(安卓)dependency ‘androidx.core:core’ has different
  7. 四十七、实现调用Android手机的拍照功能
  8. android中添加arial字体(非android默认字体)
  9. 在RelativeLayout布局中可以设置标签的android:layout_toLeftO..

随机推荐

  1. Android(安卓)adapter中调用activity中的
  2. android基于tcpdump的数据包捕获完整解决
  3. Android适配(屏幕适配、国际化适配)
  4. Android(安卓): java.lang.UnsatisfiedLi
  5. android平台下基于MediaRecorder和AudioR
  6. Android星星评分控件RatingBar的使用
  7. Android studio 添加assets文件夹
  8. android 获取屏幕高度,宽度,状态栏高度
  9. 搭建Android(安卓)CTS测试环境总结
  10. Android ROM 开发技能图谱