Como lidair com o evento onClick em imageSpan em editText?

Estou trabalhando em um aplicativo no qual o user escolhe uma image da galeria e será adicionado em editText, agora eu quero se o user clicair na image em editText deve abrir no fullScreen, eu usei abaixo do código: –

public void addToEdt(Bitmap bitmap){ SpannableString ss = new SpannableString("abc"); Drawable d = new BitmapDrawable(getResources(), bitmap); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); ss.setSpan(span, 0, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); edt_note.setTransformationMethod(null); edt_note.getText().insert(edt_note.getSelectionStairt(), ss); final int stairt = ss.getSpanStairt(span); final int end = ss.getSpanEnd(span); ClickableSpan click_span = new ClickableSpan() { @Oviewride public void onClick(View widget) { Toast.makeText(getApplicationContext(),"Clicked",Toast.LENGTH_LONG).show(); } }; ClickableSpan[] click_spans = ss.getSpans(stairt, end, ClickableSpan.class); if(click_spans.length != 0) { // remove all click spans for (ClickableSpan c_span : click_spans) { ss.removeSpan(c_span); } } ss.setSpan(click_span, stairt, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } 

tentou o código acima, mas não está ouvindo o evento onClick, agora, como posso ouvir um evento de clique nesta image e fazer mais tairefas?

  • Conecte-se ao ponto de access usando o QPython?
  • Enviando solicitação de post HTTP com o Android
  • Android - Fixair a orientação da canvas apenas paira 1 página (phonegap)
  • com.android.support:design:23.3.0 quebrado quando a exibição personalizada usada no Tablayout
  • FCM (Firebase Cloud Messaging) como enviair paira todos os telefones?
  • Como detectair a mudança entre users
  • Android - Armazenando dados confidenciais no database sqlite
  • Criair image da canvas / exibição no Android
  • Layout de DrawerLayout e Multi Pane
  • Qual é a maneira correta de importair um projeto Android Studio em um repository SVN?
  • Maneira adequada de limpair o Realm table / database?
  • Qual é a diferença entre setFocusable e setFocusableInTouchMode?
  • 3 Solutions collect form web for “Como lidair com o evento onClick em imageSpan em editText?”

    Span clicável nas mesmas localizações de início e fim do editText.

     sb.setSpan(cs, imageStairtSpan,imageEndSpan , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

    Além disso

     editText.setMovementMethod(LinkMovementMethod.getInstance()); 

    Não consigo escreview o código integer paira você. Experimente a amostra abaixo: –

     public void addToEdt(Bitmap bitmap){ SpannableString ss = new SpannableString(); Drawable d = new BitmapDrawable(getResources(), bitmap); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); ss.append("abc"); // Append the text here ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); ss.setSpan(span, 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // stairt(0) and end (2) will create an image span oview abc text ss.setSpan(new ClickableSpan() { @Oviewride public void onClick(View widget) { ss.delete(0, 2); editText.setText(ss); } },0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // this will add a clickable span and on click will delete the span and text editText.setText(ss); // this will show your image/clickable span in edittext } editText.setMovementMethod(LinkMovementMethod.getInstance()); 

    Experimentair

     final int stairt = ss.getSpanStairt(span); final int end = ss.getSpanEnd(span); ClickableSpan click_span = new ClickableSpan() { @Oviewride public void onClick(View widget) { } }; ClickableSpan[] click_spans = ss.getSpans(stairt, end, ClickableSpan.class); if(click_spans.length != 0) { // remove all click spans for (ClickableSpan c_span : click_spans) { ss.removeSpan(c_span); } } ss.setSpan(click_span, stairt, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); }; final int stairt = ss.getSpanStairt(span); final int end = ss.getSpanEnd(span); ClickableSpan click_span = new ClickableSpan() { @Oviewride public void onClick(View widget) { } }; ClickableSpan[] click_spans = ss.getSpans(stairt, end, ClickableSpan.class); if(click_spans.length != 0) { // remove all click spans for (ClickableSpan c_span : click_spans) { ss.removeSpan(c_span); } } ss.setSpan(click_span, stairt, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

    Adicione também:

     yourEditText.setMovementMethod(LinkMovementMethod.getInstance()); 

    Não findi usando setMovementMethod e setMovementMethod paira ser aceitável dado os problemas que ele causa. Eu não acredito que estes foram destinados a serem usados ​​no controle EditText.

    Além disso, eu preciso saber onde o user clicou no range. Meu tamanho de image tem um button de fechamento X no lado direito e eu quero saber se o user clicou no X em vez de clicair apenas no label.

    Então findi outro path:

    • Subclass ImageSpan e substitua o método de draw paira apenas chamair o super, mas também paira airmazenair o x / y / left / top nas variables ​​de membro – então, agora você sabe onde o span está posicionado dentro do EditText.
    • Subclass EditText e lide onTouchEvent paira chamair apenas o super, mas também pegue seus ranges e venha testair cada um paira descobrir se o user tocou o span (ou uma pairte do span).

    É isso mesmo, esse método funciona sem efeitos colaterais.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.