如何用TabLayout中的图标替换字符串?

时间:2016-03-29 11:37:52

标签: android android-viewpager android-tablayout

我正在尝试使用TabLayout创建ViewPager并在TabLayout中使用图标而不是文本。我尝试了关于stackoverflow的教程和答案,但没有任何帮助解决我的问题。

我的TabLayout

<android.support.design.widget.TabLayout
                android:id="@+id/tab_layout"
                style="@style/MyCustomTabLayout"
                android:layout_width="match_parent"
                android:layout_height="?android:attr/actionBarSize"
                android:layout_alignParentBottom="true"
                android:background="@color/colorPrimary"
                app:tabGravity="fill"
                app:tabMode="fixed"
                local:theme="@style/ViewPagerTheme"
                />

MyCustomTabLayout样式

<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
    <item name="tabTextAppearance">@style/MyCustomTextAppearance</item>

</style>

<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab">
    <item name="textAllCaps">false</item>
</style>

我的PagerAdapter getPageTitle()

@Override
public CharSequence getPageTitle(int position) {
    Drawable image = ContextCompat.getDrawable(App.getContext(), PageInfo.getByPosition(position).getIConResId());
    image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
    SpannableString sb = new SpannableString(" ");
    ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM);
    sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    return sb;
}

我正在使用带有

的样式

<item name="textAllCaps">false</item>

但是当我改变SpannableString sb = new SpannableString(" ");时 这样的事情

SpannableString sb = new SpannableString("a");

我的TabLayout反映了大写字母A,如果留空格我的TabLayout没有值并且是空白的,我想问题应该在这一步,但我不知道如何解决它。

3 个答案:

答案 0 :(得分:3)

试试这个:

for (int i = 0; i < tabLayout.getTabCount(); i++) {
  tabLayout.getTabAt(i).setIcon(R.drawable.your_icon);
}

答案 1 :(得分:0)

您可以在标签布局中设置图标而不是字符串,为此使用以下代码行。

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    tabLayout.addTab(tabLayout.newTab().setIcon());

答案 2 :(得分:0)