2016-05-04 13 views
0

Sliding Tab Layoutcenter(Vertical Center)にテキストとアイコンを配置しようとしています。どうやってやるの ?スライドタブレイアウトのアイコンとテキストをcenter_verticalに整列する方法

@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

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

+0

私の答えを見てください。それはあなたを助ける。 – pRaNaY

答えて

0

コードの下に試してみてください。

@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; 
} 
} 

私はそれはあなたを助ける願っています。

関連する問題