0

J'ai une chaîne spannnable et que spannable sting containg images et chaîne et mais Quand i Afficher cette chaîne sur textview que les images alignent avec la ligne de base de textview je veux afficher ALIGN_TOP avec cette chaîne Je suis coincé sur ce s'il vous plaît aider moi de trier.Comment les guillemets align-top avec du texte dans TextView?

Voici mon code

 String text2 = " Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. "; 

     Spannable spannable = new SpannableString(text2); 

     spannable.setSpan(new ImageSpan(mActivity, R.mipmap.start_quote_green), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
     spannable.setSpan(new ImageSpan(mActivity, R.mipmap.end_quote_green), text2.length()-1, text2.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); 

     inspirationalActivityInspirationalTextTv.setText(spannable, TextView.BufferType.SPANNABLE); 

Sortie
result

requis
required

+0

Astuce: vous vous détournez le dossier 'mipmap'/s. Ce dossier doit contenir ** uniquement l'icône du lanceur **. Et ** rien d'autre ** (c'est-à-dire: PAS les ressources graphiques de l'application). Ceux-ci doivent être placés dans le ou les dossiers 'drawable'. –

+0

@ModularSynth nous pouvons utiliser le dossier mipmap pour rsource graphique son pas et problème pour l'application –

+0

Ce n'est pas un problème, à droite. Mais ce n'est pas correct non plus: [le dossier res/mipmap pour une icône de lanceur, ou le dossier res/drawable pour d'autres types d'icônes.] (Https://developer.android.com/studio/write/image-asset-studio .html) –

Répondre

2

Voici Réponse

 String text2 = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. "; 

     Spannable spannable = new SpannableString(text2); 
     spannable.setSpan(new TopImageSpan(mActivity, R.mipmap.start_quote_green), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
     spannable.setSpan(new TopImageSpan(mActivity, R.mipmap.end_quote_green), text2.length()-1, text2.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); 


     inspirationalActivityInspirationalTextTv.setText(spannable, TextView.BufferType.SPANNABLE); 

TopImageSpan classe pour Aligner en haut avec le texte

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.Rect; 
import android.graphics.drawable.Drawable; 
import android.support.annotation.NonNull; 
import android.text.style.DynamicDrawableSpan; 
import android.text.style.ImageSpan; 

import java.lang.ref.WeakReference; 

/** 
* Created by Humayoon on 8/10/17. 
*/ 

public class TopImageSpan extends ImageSpan { 

    private WeakReference<Drawable> mDrawableRef; 
    public static boolean startQuote = false,EndQuote = true; 

    public TopImageSpan(Context context, final int drawableRes) { 
     super(context, drawableRes); 
    } 

    @Override 
    public int getSize(Paint paint, CharSequence text, 
         int start, int end, 
         Paint.FontMetricsInt fm) { 
     Drawable d = getCachedDrawable(); 
     Rect rect = d.getBounds(); 

     if (fm != null) { 
      Paint.FontMetricsInt pfm = paint.getFontMetricsInt(); 
      // keep it the same as paint's fm 
      fm.ascent = pfm.ascent; 
      fm.descent = pfm.descent; 
      fm.top = pfm.top; 
      fm.bottom = pfm.bottom; 
     } 

     return rect.right; 
    } 

    @Override 
    public void draw(@NonNull Canvas canvas, CharSequence text, 
        int start, int end, float x, 
        int top, int y, int bottom, @NonNull Paint paint) { 
     Drawable b = getCachedDrawable(); 
     canvas.save(); 

     int drawableHeight = b.getIntrinsicHeight(); 
     int fontAscent = paint.getFontMetricsInt().ascent; 
     int fontDescent = paint.getFontMetricsInt().descent; 
     int transY = bottom - b.getBounds().bottom + // align bottom to bottom 
       (drawableHeight - fontDescent + fontAscent); // align center to center 

     canvas.translate(x, transY); 
     b.draw(canvas); 
     canvas.restore(); 
    } 

    // Redefined locally because it is a private member from DynamicDrawableSpan 
    private Drawable getCachedDrawable() { 
     WeakReference<Drawable> wr = mDrawableRef; 
     Drawable d = null; 

     if (wr != null) 
      d = wr.get(); 

     if (d == null) { 
      d = getDrawable(); 
      mDrawableRef = new WeakReference<>(d); 
     } 

     return d; 
    } 
}