3 votes

Comment personnaliser les onglets de TabbedPage dans Xamarin.Forms?

Je suis en train d'utiliser une TabbedPage comme MainPage de mon application Xamarin.Forms (Version Xamarin.Forms : 2.3.5.239-pre3). Ma MainActivity hérite de FormsAppCompatActivity.

Il y a quatre pages de type ContentPage ajoutées à la TabbedPage comme suit :

Cependant, les onglets sont affichés comme suit :

entrer la description de l'image ici

Maintenant, j'ai besoin de changer la taille de la police de la propriété du titre, afin que le titre entier soit affiché. Quelle est la meilleure façon de le faire? J'ai essayé un CustomRenderer mais je n'ai pas réussi à accéder aux éléments d'onglet.

J'ai essayé :

[assembly: ExportRenderer(typeof(TabbedPage), typeof(CustomTab))]
namespace AdvancedForms.Droid.CustomRenderer
{
    public class CustomTab : TabbedRenderer
    {
        protected override void DispatchDraw(Canvas canvas)
        {    
            base.DispatchDraw(canvas);
            ActionBar actionBar = activity.ActionBar;
            // Faire quelque chose ici
        }
    }
}

Mais activity.ActionBar est toujours nul.

4voto

Will Decker Points 2558

Vous devriez chercher un TabLayout, pas une ActionBar. Dernièrement, le TabLayout est le deuxième enfant dans la hiérarchie des vues du rendu, donc vous devriez pouvoir y accéder comme ceci:

var tabLayout = (TabLayout)GetChildAt(1);

Une fois que vous l'avez, vous devez parcourir les onglets individuels et appliquer la taille de police souhaitée à chaque TextView de l'onglet.

Petite astuce, la hiérarchie des vues ressemble à ceci:

MsiTabbedRenderer
    FormsViewPager
    TabLayout
        SlidingTabStrip
            TabView
                AppCompatImageView
                AppCompatTextView
            TabView
                AppCompatImageView
                AppCompatTextView
            TabView
                AppCompatImageView
                AppCompatTextView
            ...

La méthode que j'utilise pour générer ces informations est incluse ci-dessous pour votre plaisir:

    public static void DebugLayout(this View self, int indent = 0)
    {
        // écrire les infos sur moi en premier
        var indents = new string('\t', indent);
        System.Diagnostics.Debug.WriteLine(indents + self.GetType().Name);

        // vérifier si je suis un groupe de vues
        var vg = self as ViewGroup;
        if (vg == null) return;

        // énumérer mes enfants
        var children = Enumerable.Range(0, vg.ChildCount).Select(x => vg.GetChildAt(x));

        // récursion sur chaque enfant
        foreach (var child in children)
            DebugLayout(child, indent+1);
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X