Inserting a picture in EditText is basically two ways:
1, by html.fromhtml (.. ) to achieve [Mw_shl_code=java,true]etext.append (html.fromhtml (""+ R.drawable.ohoh +"'/>", Imagegetter,NULL)); [/Mw_shl_code]2, through Imagespan and spannablestring/Spannablestringbuilder. [Mw_shl_code=java,true]spannablestring SS =Newspannablestring (IMGSTR); Drawable drawable=getresources (). getdrawable (r.drawable.bad_smelly); Drawable.setbounds (0,0, Drawable.getintrinsicwidth (), Drawable.getintrinsicheight ()); Imagespan Imagespan=NewImagespan (drawable, imagespan.align_baseline); Ss.setspan (Imagespan,0, Imgstr.length (), spannable.span_exclusive_exclusive); Etext.append (ss);
The complete code is affixed below,
Click events are implemented by adding clickablespan.
import android.os.bundle;import android.app.activity;import android.content.context;import android.util.Log; Import Android.view.menu;import Android.graphics.drawable.drawable;import Android.text.html;import Android.text.spannable;import Android.text.spannablestring;import Android.text.html.imagegetter;import Android.text.spanned;import Android.text.method.linkmovementmethod;import Android.text.style.ClickableSpan; Import Android.text.style.imagespan;import Android.view.view;import Android.view.view.onclicklistener;import Android.view.inputmethod.inputmethodmanager;import Android.widget.button;import Android.widget.EditText;import Android.widget.Toast; Public classMainactivity extends Activity {PrivateFinal String TAG ="mainactivity"; PrivateEditText EText; Private intSpanend; @Override Publicboolean Oncreateoptionsmenu (Menu menu) {//inflate the menu; This adds items to the action bar if it is present.getmenuinflater (). Inflate (R.menu.main, menu); return true; } @Overrideprotected voidonCreate (Bundle savedinstancestate) {//TODO auto-generated Method Stubsuper.oncreate (savedinstancestate); Setcontentview (R.layout.activity_main); EText=(EditText) Findviewbyid (R.ID.TEST1_EDITTEXT1); Final String Imgstr="[Smile]"; //Etext.setonclicklistener (textlistener);//using TextListener to achieve imagespan response clicks are not reliable, sometimes invalid. Final Imagegetter Imagegetter=NewImagegetter () {@Override Publicdrawable getdrawable (String source) {intID =integer.parseint (source); //get a Picture object from a resource file by IDdrawable d =getresources (). getdrawable (ID); D.setbounds (0,0, D.getintrinsicwidth (), D.getintrinsicheight ()); returnD; } }; Button Button=(Button) Findviewbyid (R.id.test1_button1); Button Button2=(Button) Findviewbyid (R.id.test1_button2); Button Button3=(Button) Findviewbyid (R.id.test1_button3); Button.setonclicklistener (NewOnclicklistener () {@Override Public voidOnClick (View v) {//TODO auto-generated Method Stubspannablestring SS =Newspannablestring (IMGSTR); Drawable drawable=getresources (). getdrawable (R.drawable.hungry_1); Drawable.setbounds (0,0, Drawable.getintrinsicwidth (), Drawable.getintrinsicheight ()); Imagespan Imagespan=NewImagespan (drawable, imagespan.align_baseline); Ss.setspan (Imagespan,0, Imgstr.length (), spannable.span_exclusive_exclusive); intNowlocation =Etext.getselectionstart (); //Nowlocation need to be judged to avoid cross-border exceptions. etext.gettext (). Insert (Nowlocation, SS); Setspanclickable (); Etext.gettext (). Insert (Spanend,"\ n"); } }); Button2.setonclicklistener (NewOnclicklistener () { Public voidOnClick (View v) {spannablestring ss=Newspannablestring (IMGSTR); Drawable drawable=getresources (). getdrawable (r.drawable.bad_smelly); Drawable.setbounds (0,0, Drawable.getintrinsicwidth (), Drawable.getintrinsicheight ()); Imagespan Imagespan=NewImagespan (drawable, imagespan.align_baseline); Ss.setspan (Imagespan,0, Imgstr.length (), spannable.span_exclusive_exclusive); Etext.append (ss); Setspanclickable (); Etext.append ("\ n"); } }); Button3.setonclicklistener (NewOnclicklistener () {@Override Public voidOnClick (View v) {etext.append (html.fromhtml (""+ R.drawable.ohoh +"'/>", Imagegetter,NULL)); Setspanclickable (); } }); } PrivateOnclicklistener TextListener =NewOnclicklistener () {//This method is not reliable@Override Public voidOnClick (View v) {//turn off the soft keyboardInputmethodmanager IMM =(Inputmethodmanager) Getsystemservice (Context.input_method_service); Imm.hidesoftinputfromwindow (Etext.getwindowtoken (),0); spanned S=Etext.gettext (); Imagespan[] Imagespans= S.getspans (0, S.length (), Imagespan.class); intSelectionStart =Etext.getselectionstart (); for(Imagespan span:imagespans) {intStart =S.getspanstart (span); intEnd =s.getspanend (span); if(SelectionStart >= start && SelectionStart < end)//Find a picture{Toast.maketext (Getapplicationcontext (),"Find a picture", Toast.length_short). Show (); return; } } //turn on the soft keyboardImm.showsoftinput (EText,0); } }; Public voidsetspanclickable () {//This method is more reliablespanned s =Etext.gettext (); //Setmovementmethod is important, otherwise clickablespan cannot get the click event. Etext.setmovementmethod (Linkmovementmethod.getinstance ()); Imagespan[] Imagespans= S.getspans (0, S.length (), Imagespan.class); for(Imagespan Span:imagespans) {final String image_src=Span.getsource (); FinalintStart =S.getspanstart (span); FinalintEnd =s.getspanend (span); Spanend=end; LOG.I (TAG,"setspanclickable, image_src ="+image_src+", start ="+start+", end ="+end); Clickablespan Click_span=NewClickablespan () {@Override Public voidOnClick (View widget) {etext.setcursorvisible (false); LOG.I (TAG,"Click_span, OnClick,"+Etext.getselectionstart ()); Toast.maketext (mainactivity. This, "Image Clicked"+image_src, Toast.length_short). Show (); } }; Clickablespan[] Click_spans=S.getspans (Start, End, Clickablespan.class); LOG.I (TAG,"click_spans.length ="+click_spans.length); if(Click_spans.length! =0) { //Remove all click Spans for(Clickablespan C_span:click_spans) {((spannable) s). Removespan (C_span); }} ((spannable) s). Setspan (Click_span, start, End, spanned.span_exclusive_exclusive); LOG.I (TAG,"length ="+s.getspans (Start, End,clickablespan.class). length); } } }
Effect:
Code: here
Insert images in Android EditText and respond to click events