第一步:创建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 Gallery(画廊)以及BaseAdapter
  2. android保存图片到sdcard后,在图片浏览器不能马上显示出来
  3. 导入android studio 项目错误:Error:(1, 0) Plugin with id 'com.
  4. 2011.08.18——— android 图片效果 ImageSwitcher+GestureDetec
  5. 从xml添加menu注意事项
  6. Android(安卓)动态设置布局属性
  7. Android(安卓)用AsyncTask下载网络图片并显示百分比
  8. Android(安卓)实现截屏
  9. Android(安卓)TextView文字过多时通过滚动条显示多余内容

随机推荐

  1. CentOS 7部署OpenStack--部署Newtron
  2. php字符串函数
  3. 13:VMware Horizon View 8.0-创建链接克隆
  4. [翻译]微服务设计模式 - 2. 微服务应用模
  5. httpd,tomcat,tomcat-connector下载地址
  6. [翻译]微服务设计模式 - 1. 单体应用模式
  7. Cisdem Duplicate Finder:快速查找和删除
  8. 基础篇--ES集群部署
  9. 基础篇--ES基础数据操作
  10. Kibana的安装及配置应用