`
104zz
  • 浏览: 1504040 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

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("哈哈哈");
    }


    
}
 

第四步:运行结果如图:


 

  • 大小: 20.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics