2016-05-04 13 views
0

aus Ich versuche, Text und Symbol an die center(Vertical Center) in Sliding Tab Layout auszurichten. Wie kann ich das machen ?So richten Sie das Symbol und den Text an der center_vertical im Schieberegisterlayout

@Override 
public CharSequence getPageTitle(int position) { 
    Drawable image = mContext.getResources().getDrawable(imageResId[position]); 
    image.setBounds(0, 0, image.getWidth(), image.getHeight()); 
    // Replace blank spaces with image icon 
    SpannableString sb = new SpannableString(" " + tabs[position]); 
    ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM); 
    sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    return sb; 
} 

Image

+0

besuchen Sie diese http://www.androidhive.info/2015/09/android-material-design-working-with-tabs/ –

+0

Siehe meine Antwort. Es hilft dir. – pRaNaY

Antwort

0

unten Code Versuchen:

@Override 
public CharSequence getPageTitle(int position) { 
    Drawable image = mContext.getResources().getDrawable(imageResId[position]); 
    image.setBounds(0, 0, image.getWidth(), image.getHeight()); 
    // Replace blank spaces with image icon 
    SpannableString sb = new SpannableString(" " + tabs[position]); 
    ImageSpan imageSpan = new CenteredImageSpan(getApplicationContext(), imageResId[position]); 
    sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    return sb; 
} 


public class CenteredImageSpan extends ImageSpan { 

private WeakReference<Drawable> mDrawableRef; 

public CenteredImageSpan(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)/2; // 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; 
} 
} 

Ich hoffe, dass es Ihnen helfen.

Verwandte Themen