如何将SpannableString修改为图标下方的字符串?

时间:2015-02-12 03:27:30

标签: android android-layout textview spannablestring android-icons

目前我有一个像这样的spannableString,图标位于标题字符串的左侧。问题是,有没有办法让图标在字符串上方,而图标是对齐中心?

这样的样本:

    []  <==== This is the icon
 TitleTest  <=== This is the title
   ABCD

由于

这是我的代码尝试:

   Drawable image = context.getResources().getDrawable(R.drawable.ic_launcher);
    image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
    // Replace blank spaces with image icon
    SpannableString sb = new SpannableString("   " + tabTitles[position]);
    ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BASELINE);
    sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    return sb;

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

我今天看https://guides.codepath.com/android/Google-Play-Style-Tabs-using-TabLayout并有同样的问题。为SpannableString添加换行符对我有用,因此以下修改将起到作用:

SpannableString sb = new SpannableString(" \n" + tabTitles[position]);

答案 1 :(得分:0)

将三个视图(ImageView for icon和2 TextView s)放在垂直LinearLayout中,并使用XML中的android:layout_gravity属性将视图置于LinearLayout的中心位置。另外,将android:gravity上的TextView属性设置为“中心”,使文本居中于TextView

如果您不想使用XML(似乎就是这种情况),可以使用LinearLayout.LayoutParams构造函数设置layout_gravity,其中包含width,height和GRAVITY参数。可以使用mTextView.setGravity(Gravity.CENTER);

完成文本对齐

答案 2 :(得分:0)

只需使用drawableTop属性即可。

<TextView
    android:drawableTop="@drawable/my_drawable"/>

或者来自代码:

myTextView.setCompoundDrawablesWithIntrinsicBounds(
        0, R.drawable.my_drawable, 0, 0);