在FragmentPagerAdapter标签

时间:2015-09-25 09:43:48

标签: android tabs xamarin

这个例子是在Xamarin中使用C#创建的,如果您在Java中知道答案,我也可以将其转换为C#

我使用FragmentPagerAdapter将三个不同的片段显示为标签。我可以在Tab标题中显示一些文字,如下所示:

public override Java.Lang.ICharSequence GetPageTitleFormatted(int position)
{
    return new Java.Lang.String("Tab: " + position);
}

这很好用:我看到三个标题为Tab: 0Tab: 1Tab: 2的标签。

现在,我想用一些图标替换文本。我尝试使用SpannableString& ImageSpanPagerSlidingTabStrip进行同样的尝试。 public override Java.Lang.ICharSequence GetPageTitleFormatted(int position) { var image = Application.Context.Resources.GetDrawable(Resource.Drawable.icon); image.SetBounds(0, 0, image.IntrinsicWidth, image.IntrinsicHeight); var spannableString = new Android.Text.SpannableString("[icon]"); var imageSpan = new Android.Text.Style.ImageSpan(image, Android.Text.Style.SpanAlign.Bottom); spannableString.SetSpan(imageSpan, 0, 1, Android.Text.SpanTypes.ExclusiveExclusive); return spannableString; }

[icon]

可悲的是,我现在看到的是标题的三倍C:\Program Files (x86)\Microsoft SDKs\Windows。看起来好像图标根本没有添加到标题中。

我在这里做错了吗?谢谢你的帮助!

2 个答案:

答案 0 :(得分:13)

默认情况下,TabLayout创建的选项卡将textAllCaps属性设置为true,这会阻止ImageSpans呈现。您可以通过更改tabTextAppearance属性来覆盖此行为。

<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>

然后您可以将MyCustomTabLayout样式添加到TabLayout,如下所示:

<android.support.design.widget.TabLayout
 android:id="@+id/tabs"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 style="@style/MyCustomTabLayout" />

答案 1 :(得分:0)

就像Youp所说我们必须将上述风格应用为

style="@style/MyCustomTabLayout"

但不是

android:textAppearance="@style/MyCustomTabLayout"

有关详细信息,请参阅此处 https://guides.codepath.com/android/Google-Play-Style-Tabs-using-TabLayout