2015-09-25 12 views
5

Przykład ten jest tworzony w Xamarin przy użyciu C#, jeśli znasz odpowiedź w Javie, będę w stanie przekształcić go w C# zaPokaż ikony na FragmentPagerAdapter kartach

Używam FragmentPagerAdapter do wyświetlenia trzy różne Fragmenty jako Tabulatory. Jestem w stanie wyświetlić jakiś tekst w nagłówkach Tab tak:

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

Działa to dobrze: Widzę trzy zakładki z tytułami Tab: 0, Tab: 1 i Tab: 2.

Teraz chcę zastąpić tekst niektórymi ikonami. Próbuję to zrobić tak samo jak z PagerSlidingTabStrip, używając SpannableString.

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

Niestety, co widzę teraz jest trzy razy [icon] jako nagłówki. Wygląda to tak, jakby ikony nie zostały w ogóle dodane do nagłówków.

Czy robię coś nie tak? Dzięki za pomoc!

Odpowiedz

12

Domyślnie zakładka utworzona przez TabLayout ustawia właściwość textAllCaps na wartość true, co zapobiega renderowaniu ImageSpans. Można zmienić to zachowanie, zmieniając właściwość 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> 

Następnie można dodać stylu MyCustomTabLayout do TabLayout tak:

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

Dzięki! * facepalm * – MarcoK

+0

Spróbowałem tego i zastosowałem ten styl do Tablayout tak: android: textAppearance = "@ style/MyCustomTabLayout" Ale to nie działa Właśnie dostałem "[ikona]" String –

+0

Masz rację. Musisz zastosować styl do TabLayout. Zmienię moją odpowiedź. –

Powiązane problemy