Allineare ImageSpan alla parte superiore del TextView

Attualmente desidero aggiungere un'image tra i testi e allinearlo alla parte superiore del TextView.

Qualcosa come questo:

  • Android "ciao mondo" esempio di pushnotification
  • Correggere il rendering Hindi (Unicode) in Android
  • ScrollView non scorre verso il basso
  • Android RatingBar - un pasticcio completo
  • La tastiera soft nasconde la metà di EditText
  • Come aggiungere una libreria (android-support-v7-appcompat) in IntelliJ IDEA
  • immettere qui la descrizione dell'immagine

    Gli unici allineamenti verticali che posso trovare sono la linea di base (che sembra metterla proprio al centro del text) e allineare il fondo.

    Cosa succede se uso ALIGN_BASELINE è:

    immettere qui la descrizione dell'immagine

    C'è un modo per allinearlo al vertice invece?

    Il mio codice attuale:

    txtView.setText(this.addImageAsterisk( "The string to have asterisk at the end*"), BufferType.SPANNABLE); 

    poi

     private CharSequence addImageAsterisk(String string) { Drawable d = context.getResources().getDrawable(R.drawable.img_asterisk); ImageSpan imageSpan = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); final SpannableString spannableString = new SpannableString(string); spannableString.setSpan(imageSpan, string.length()-1, string.length(), 0); return spannableString; } 

    la rimozione di ImageSpan.ALIGN_BASELINE lo imposta per allinearsi al fondo che non è anche il mio risultato previsto.

    — Grazie dell'utente Lalit Poptani, ho provato ad applicare la tua risposta —- dopo aver applicato questo, quello che succede è che l'intera visualizzazione di text sembra avere superiore in margine.

    prima di applicare la fascia:

     This is the text* 

    dopo aver applicato il SuperscriptSpanAdjuster

     (some extra space) This is the text* 

    Il mio codice:

     String string = "This is the text*"; Drawable d = this.context.getResources().getDrawable(R.drawable.img_asterisk); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); ImageSpan imageSpan = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); SuperscriptSpanAdjuster s = new SuperscriptSpanAdjuster(1.5); final SpannableString spannableString = new SpannableString(string); spannableString.setSpan(s, string.length() - 1, string.length(), 0); spannableString.setSpan(imageSpan, string.length(), string.length() + 1, 0); textView.setText(spannableString); 

  • Librerie di filter delle immagini Android
  • Navigazione di Google Maps - utilizzo di Google Navigation in applicazione Android
  • Android Gradle Apache HttpClient non esiste?
  • Android PCM byte
  • ListView con intestazione all'interno di un rotolo orizzontale
  • Interrompere la chiamata in arrivo in android
  • One Solution collect form web for “Allineare ImageSpan alla parte superiore del TextView”

    Quello che puoi fare è utilizzare un MetricAffectingSpan personalizzato per mantenere il suo rapporto come,

     public class SuperscriptSpanAdjuster extends MetricAffectingSpan { double ratio = 0.5; public SuperscriptSpanAdjuster(double ratio) { this.ratio = ratio; } @Override public void updateDrawState(TextPaint paint) { paint.baselineShift += (int) (paint.ascent() * ratio); } @Override public void updateMeasureState(TextPaint paint) { paint.baselineShift += (int) (paint.ascent() * ratio); } } 

    E si può usare SpannableString per applicare asterisco alla string come,

     SpannableString mString = new SpannableString("This is what I wanted*"); mString.setSpan(new SuperscriptSpanAdjuster(0.5), mString.length() - 1, mString.length(), SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE); mTextView.append("\n"); mTextView.append(mString); 

    Questo è aggiungere asterisco al text come richiesto. E la tua output sarà come,

    immettere qui la descrizione dell'immagine

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.