Xamarin.forms xamarin表单选项卡式页面标题无换行符

Xamarin.forms xamarin表单选项卡式页面标题无换行符,xamarin.forms,tabbedpage,Xamarin.forms,Tabbedpage,我有一个带有页数的标签页,这里的问题是页面的标题没有很好地显示出来,它需要没有包装或展开来适应文本。 任何解决此问题的建议。您需要创建一个TabbedPageRenderer using System; using System.Collections.Generic; using System.Linq; using System.Text; using Android.App; using An

我有一个带有页数的标签页,这里的问题是页面的标题没有很好地显示出来,它需要没有包装或展开来适应文本。
任何解决此问题的建议。

您需要创建一个TabbedPageRenderer

        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;

        using Android.App;
        using Android.Content;
        using Android.OS;
        using Android.Runtime;
        using Android.Views;
        using Android.Widget;
        using Xamarin.Forms;
        using Xamarin.Forms.Platform.Android.AppCompat;
        using AppTab.Droid;
        using Android.Support.V4.View;
        using Android.Support.Design.Widget;
        using System.ComponentModel;
        using Xamarin.Forms.Platform.Android;
        using AppTab;
        using Android.Graphics.Drawables;
        using Android.Graphics;

        [assembly: ExportRenderer(typeof(CustomTabbedPage), typeof(ScrollableTabbedPage))]
        namespace AppTab.Droid
        {
          public class ScrollableTabbedPage : TabbedPageRenderer
            {
                public override void OnViewAdded(Android.Views.View child)
                {
                    base.OnViewAdded(child);
                    var tabLayout = child as TabLayout;
                    if (tabLayout != null)
                    {
                        tabLayout.TabMode = TabLayout.ModeScrollable;
                    }
                }


                public static void Init()
                {
                    var unused = DateTime.UtcNow;
                }

                private CustomTabbedPage FormsTabbedPage => Element as CustomTabbedPage;
                private Android.Graphics.Color _selectedColor = Android.Graphics.Color.Black;
                private static readonly Android.Graphics.Color DefaultUnselectedColor = Xamarin.Forms.Color.Gray.ToAndroid();
                private static Android.Graphics.Color _barBackgroundDefault;
                private Android.Graphics.Color _unselectedColor = DefaultUnselectedColor;

                ViewPager _viewPager;
                TabLayout _tabLayout;

                protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
                {

                    base.OnElementChanged(e);

                    // Get tabs
                    for (var i = 0; i < ChildCount; i++)
                    {
                        var v = GetChildAt(i);
                        var pager = v as ViewPager;
                        if (pager != null)
                            _viewPager = pager;
                        else if (v is TabLayout)
                            _tabLayout = (TabLayout)v;
                    }


                    if (e.OldElement != null)
                    {
                        _tabLayout.TabSelected -= TabLayout_TabSelected;
                        _tabLayout.TabUnselected -= TabLayout_TabUnselected;
                    }

                    if (e.NewElement != null)
                    {
                        _barBackgroundDefault = (_tabLayout.Background as ColorDrawable)?.Color ??
                            Android.Graphics.Color.Blue;
                        SetSelectedColor();
                        SetBarBackgroundColor();
                        _tabLayout.TabSelected += TabLayout_TabSelected;
                        _tabLayout.TabUnselected += TabLayout_TabUnselected;

                        SetupTabColors();
                        SelectTab(0);
                    }

                }

                void SelectTab(int position)
                {
                    if (_tabLayout.TabCount > position)
                    {
                        _tabLayout.GetTabAt(position).Icon?
                            .SetColorFilter(_selectedColor, PorterDuff.Mode.SrcIn);
                        _tabLayout.GetTabAt(position).Select();
                    }
                    else
                    {
                        throw new IndexOutOfRangeException();
                    }
                }


                void SetupTabColors()
                {
                    _tabLayout.SetSelectedTabIndicatorColor(_selectedColor);
                    _tabLayout.SetTabTextColors(_unselectedColor, _selectedColor);
                    for (int i = 0; i < _tabLayout.TabCount; i++)
                    {
                        var tab = _tabLayout.GetTabAt(i);
                        tab.Icon?.SetColorFilter(_unselectedColor, PorterDuff.Mode.SrcIn);
                    }
                }

                private void TabLayout_TabUnselected(object sender, TabLayout.TabUnselectedEventArgs e)
                {
                    var tab = e.Tab;
                    tab.Icon?.SetColorFilter(_unselectedColor, PorterDuff.Mode.SrcIn);
                }

                private void TabLayout_TabSelected(object sender, TabLayout.TabSelectedEventArgs e)
                {
                    var tab = e.Tab;
                    _viewPager.CurrentItem = tab.Position;
                    tab.Icon?.SetColorFilter(_selectedColor, PorterDuff.Mode.SrcIn);
                }

                protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
                {
                    int lastPosition = _tabLayout.SelectedTabPosition;
                    switch (e.PropertyName)
                    {
                        case nameof(CustomTabbedPage.BarBackgroundColor):
                        case nameof(CustomTabbedPage.BarBackgroundApplyTo):
                            SetBarBackgroundColor();
                            SetupTabColors();
                            SelectTab(lastPosition);
                            break;
                        case nameof(CustomTabbedPage.SelectedColor):
                            SetSelectedColor();
                            SetupTabColors();
                            SelectTab(lastPosition);
                            break;
                        default:
                            base.OnElementPropertyChanged(sender, e);
                            break;
                    }
                }

                private void SetSelectedColor()
                {

                    if (FormsTabbedPage.SelectedColor != default(Xamarin.Forms.Color))
                        _selectedColor = FormsTabbedPage.SelectedColor.ToAndroid();
                }

                private void SetBarBackgroundColor()
                {
                    if (FormsTabbedPage.BarBackgroundApplyTo.HasFlag(BarBackgroundApplyTo.Android))
                    {
                        _tabLayout.SetBackgroundColor(FormsTabbedPage.BarBackgroundColor.ToAndroid());
                        _unselectedColor = FormsTabbedPage.BarBackgroundColor != default(Xamarin.Forms.Color)
                            ? FormsTabbedPage.BarBackgroundColor.ToAndroid()
                            : DefaultUnselectedColor;
                    }
                    else
                    {
                        _tabLayout.SetBackgroundColor(_barBackgroundDefault);
                        _unselectedColor = DefaultUnselectedColor;
                    }
                }
            }
        }
第三,你需要定制主页

        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;

        using Android.App;
        using Android.Content;
        using Android.OS;
        using Android.Runtime;
        using Android.Views;
        using Android.Widget;
        using Xamarin.Forms;
        using Xamarin.Forms.Platform.Android.AppCompat;
        using AppTab.Droid;
        using Android.Support.V4.View;
        using Android.Support.Design.Widget;
        using System.ComponentModel;
        using Xamarin.Forms.Platform.Android;
        using AppTab;
        using Android.Graphics.Drawables;
        using Android.Graphics;

        [assembly: ExportRenderer(typeof(CustomTabbedPage), typeof(ScrollableTabbedPage))]
        namespace AppTab.Droid
        {
          public class ScrollableTabbedPage : TabbedPageRenderer
            {
                public override void OnViewAdded(Android.Views.View child)
                {
                    base.OnViewAdded(child);
                    var tabLayout = child as TabLayout;
                    if (tabLayout != null)
                    {
                        tabLayout.TabMode = TabLayout.ModeScrollable;
                    }
                }


                public static void Init()
                {
                    var unused = DateTime.UtcNow;
                }

                private CustomTabbedPage FormsTabbedPage => Element as CustomTabbedPage;
                private Android.Graphics.Color _selectedColor = Android.Graphics.Color.Black;
                private static readonly Android.Graphics.Color DefaultUnselectedColor = Xamarin.Forms.Color.Gray.ToAndroid();
                private static Android.Graphics.Color _barBackgroundDefault;
                private Android.Graphics.Color _unselectedColor = DefaultUnselectedColor;

                ViewPager _viewPager;
                TabLayout _tabLayout;

                protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
                {

                    base.OnElementChanged(e);

                    // Get tabs
                    for (var i = 0; i < ChildCount; i++)
                    {
                        var v = GetChildAt(i);
                        var pager = v as ViewPager;
                        if (pager != null)
                            _viewPager = pager;
                        else if (v is TabLayout)
                            _tabLayout = (TabLayout)v;
                    }


                    if (e.OldElement != null)
                    {
                        _tabLayout.TabSelected -= TabLayout_TabSelected;
                        _tabLayout.TabUnselected -= TabLayout_TabUnselected;
                    }

                    if (e.NewElement != null)
                    {
                        _barBackgroundDefault = (_tabLayout.Background as ColorDrawable)?.Color ??
                            Android.Graphics.Color.Blue;
                        SetSelectedColor();
                        SetBarBackgroundColor();
                        _tabLayout.TabSelected += TabLayout_TabSelected;
                        _tabLayout.TabUnselected += TabLayout_TabUnselected;

                        SetupTabColors();
                        SelectTab(0);
                    }

                }

                void SelectTab(int position)
                {
                    if (_tabLayout.TabCount > position)
                    {
                        _tabLayout.GetTabAt(position).Icon?
                            .SetColorFilter(_selectedColor, PorterDuff.Mode.SrcIn);
                        _tabLayout.GetTabAt(position).Select();
                    }
                    else
                    {
                        throw new IndexOutOfRangeException();
                    }
                }


                void SetupTabColors()
                {
                    _tabLayout.SetSelectedTabIndicatorColor(_selectedColor);
                    _tabLayout.SetTabTextColors(_unselectedColor, _selectedColor);
                    for (int i = 0; i < _tabLayout.TabCount; i++)
                    {
                        var tab = _tabLayout.GetTabAt(i);
                        tab.Icon?.SetColorFilter(_unselectedColor, PorterDuff.Mode.SrcIn);
                    }
                }

                private void TabLayout_TabUnselected(object sender, TabLayout.TabUnselectedEventArgs e)
                {
                    var tab = e.Tab;
                    tab.Icon?.SetColorFilter(_unselectedColor, PorterDuff.Mode.SrcIn);
                }

                private void TabLayout_TabSelected(object sender, TabLayout.TabSelectedEventArgs e)
                {
                    var tab = e.Tab;
                    _viewPager.CurrentItem = tab.Position;
                    tab.Icon?.SetColorFilter(_selectedColor, PorterDuff.Mode.SrcIn);
                }

                protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
                {
                    int lastPosition = _tabLayout.SelectedTabPosition;
                    switch (e.PropertyName)
                    {
                        case nameof(CustomTabbedPage.BarBackgroundColor):
                        case nameof(CustomTabbedPage.BarBackgroundApplyTo):
                            SetBarBackgroundColor();
                            SetupTabColors();
                            SelectTab(lastPosition);
                            break;
                        case nameof(CustomTabbedPage.SelectedColor):
                            SetSelectedColor();
                            SetupTabColors();
                            SelectTab(lastPosition);
                            break;
                        default:
                            base.OnElementPropertyChanged(sender, e);
                            break;
                    }
                }

                private void SetSelectedColor()
                {

                    if (FormsTabbedPage.SelectedColor != default(Xamarin.Forms.Color))
                        _selectedColor = FormsTabbedPage.SelectedColor.ToAndroid();
                }

                private void SetBarBackgroundColor()
                {
                    if (FormsTabbedPage.BarBackgroundApplyTo.HasFlag(BarBackgroundApplyTo.Android))
                    {
                        _tabLayout.SetBackgroundColor(FormsTabbedPage.BarBackgroundColor.ToAndroid());
                        _unselectedColor = FormsTabbedPage.BarBackgroundColor != default(Xamarin.Forms.Color)
                            ? FormsTabbedPage.BarBackgroundColor.ToAndroid()
                            : DefaultUnselectedColor;
                    }
                    else
                    {
                        _tabLayout.SetBackgroundColor(_barBackgroundDefault);
                        _unselectedColor = DefaultUnselectedColor;
                    }
                }
            }
        }
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;

        using Xamarin.Forms;

        namespace AppTab
        {
            public class CustomMain : CustomTabbedPage
            {
                public CustomMain()
                {

                    BarBackgroundApplyTo = BarBackgroundApplyTo.Android;

                    //BarBackgroundColor = Color.Red;
                    Children.Add(new abc() { Title = "ABC"});
                    Children.Add(new xyz() { Title = "XYZ" });
                    Children.Add(new pqr() { Title = "PQR" });
                    Children.Add(new str() { Title = "STR" });
                    Children.Add(new ftx() { Title = "FTX" });
                    Children.Add(new dtb() { Title = "DTB" });
                }
            }
        }

在参考资料->布局->Tabbar.xml中将tabMode设置为“可滚动”。
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;

        using Android.App;
        using Android.Content;
        using Android.OS;
        using Android.Runtime;
        using Android.Views;
        using Android.Widget;
        using Xamarin.Forms;
        using Xamarin.Forms.Platform.Android.AppCompat;
        using AppTab.Droid;
        using Android.Support.V4.View;
        using Android.Support.Design.Widget;
        using System.ComponentModel;
        using Xamarin.Forms.Platform.Android;
        using AppTab;
        using Android.Graphics.Drawables;
        using Android.Graphics;

        [assembly: ExportRenderer(typeof(CustomTabbedPage), typeof(ScrollableTabbedPage))]
        namespace AppTab.Droid
        {
          public class ScrollableTabbedPage : TabbedPageRenderer
            {
                public override void OnViewAdded(Android.Views.View child)
                {
                    base.OnViewAdded(child);
                    var tabLayout = child as TabLayout;
                    if (tabLayout != null)
                    {
                        tabLayout.TabMode = TabLayout.ModeScrollable;
                    }
                }


                public static void Init()
                {
                    var unused = DateTime.UtcNow;
                }

                private CustomTabbedPage FormsTabbedPage => Element as CustomTabbedPage;
                private Android.Graphics.Color _selectedColor = Android.Graphics.Color.Black;
                private static readonly Android.Graphics.Color DefaultUnselectedColor = Xamarin.Forms.Color.Gray.ToAndroid();
                private static Android.Graphics.Color _barBackgroundDefault;
                private Android.Graphics.Color _unselectedColor = DefaultUnselectedColor;

                ViewPager _viewPager;
                TabLayout _tabLayout;

                protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
                {

                    base.OnElementChanged(e);

                    // Get tabs
                    for (var i = 0; i < ChildCount; i++)
                    {
                        var v = GetChildAt(i);
                        var pager = v as ViewPager;
                        if (pager != null)
                            _viewPager = pager;
                        else if (v is TabLayout)
                            _tabLayout = (TabLayout)v;
                    }


                    if (e.OldElement != null)
                    {
                        _tabLayout.TabSelected -= TabLayout_TabSelected;
                        _tabLayout.TabUnselected -= TabLayout_TabUnselected;
                    }

                    if (e.NewElement != null)
                    {
                        _barBackgroundDefault = (_tabLayout.Background as ColorDrawable)?.Color ??
                            Android.Graphics.Color.Blue;
                        SetSelectedColor();
                        SetBarBackgroundColor();
                        _tabLayout.TabSelected += TabLayout_TabSelected;
                        _tabLayout.TabUnselected += TabLayout_TabUnselected;

                        SetupTabColors();
                        SelectTab(0);
                    }

                }

                void SelectTab(int position)
                {
                    if (_tabLayout.TabCount > position)
                    {
                        _tabLayout.GetTabAt(position).Icon?
                            .SetColorFilter(_selectedColor, PorterDuff.Mode.SrcIn);
                        _tabLayout.GetTabAt(position).Select();
                    }
                    else
                    {
                        throw new IndexOutOfRangeException();
                    }
                }


                void SetupTabColors()
                {
                    _tabLayout.SetSelectedTabIndicatorColor(_selectedColor);
                    _tabLayout.SetTabTextColors(_unselectedColor, _selectedColor);
                    for (int i = 0; i < _tabLayout.TabCount; i++)
                    {
                        var tab = _tabLayout.GetTabAt(i);
                        tab.Icon?.SetColorFilter(_unselectedColor, PorterDuff.Mode.SrcIn);
                    }
                }

                private void TabLayout_TabUnselected(object sender, TabLayout.TabUnselectedEventArgs e)
                {
                    var tab = e.Tab;
                    tab.Icon?.SetColorFilter(_unselectedColor, PorterDuff.Mode.SrcIn);
                }

                private void TabLayout_TabSelected(object sender, TabLayout.TabSelectedEventArgs e)
                {
                    var tab = e.Tab;
                    _viewPager.CurrentItem = tab.Position;
                    tab.Icon?.SetColorFilter(_selectedColor, PorterDuff.Mode.SrcIn);
                }

                protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
                {
                    int lastPosition = _tabLayout.SelectedTabPosition;
                    switch (e.PropertyName)
                    {
                        case nameof(CustomTabbedPage.BarBackgroundColor):
                        case nameof(CustomTabbedPage.BarBackgroundApplyTo):
                            SetBarBackgroundColor();
                            SetupTabColors();
                            SelectTab(lastPosition);
                            break;
                        case nameof(CustomTabbedPage.SelectedColor):
                            SetSelectedColor();
                            SetupTabColors();
                            SelectTab(lastPosition);
                            break;
                        default:
                            base.OnElementPropertyChanged(sender, e);
                            break;
                    }
                }

                private void SetSelectedColor()
                {

                    if (FormsTabbedPage.SelectedColor != default(Xamarin.Forms.Color))
                        _selectedColor = FormsTabbedPage.SelectedColor.ToAndroid();
                }

                private void SetBarBackgroundColor()
                {
                    if (FormsTabbedPage.BarBackgroundApplyTo.HasFlag(BarBackgroundApplyTo.Android))
                    {
                        _tabLayout.SetBackgroundColor(FormsTabbedPage.BarBackgroundColor.ToAndroid());
                        _unselectedColor = FormsTabbedPage.BarBackgroundColor != default(Xamarin.Forms.Color)
                            ? FormsTabbedPage.BarBackgroundColor.ToAndroid()
                            : DefaultUnselectedColor;
                    }
                    else
                    {
                        _tabLayout.SetBackgroundColor(_barBackgroundDefault);
                        _unselectedColor = DefaultUnselectedColor;
                    }
                }
            }
        }

它应该可以工作。

当您共享可能导致问题的代码片段时,帮助您会更容易。另外,屏幕截图太小,我无法在这里看到问题。
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;

        using Android.App;
        using Android.Content;
        using Android.OS;
        using Android.Runtime;
        using Android.Views;
        using Android.Widget;
        using Xamarin.Forms;
        using Xamarin.Forms.Platform.Android.AppCompat;
        using AppTab.Droid;
        using Android.Support.V4.View;
        using Android.Support.Design.Widget;
        using System.ComponentModel;
        using Xamarin.Forms.Platform.Android;
        using AppTab;
        using Android.Graphics.Drawables;
        using Android.Graphics;

        [assembly: ExportRenderer(typeof(CustomTabbedPage), typeof(ScrollableTabbedPage))]
        namespace AppTab.Droid
        {
          public class ScrollableTabbedPage : TabbedPageRenderer
            {
                public override void OnViewAdded(Android.Views.View child)
                {
                    base.OnViewAdded(child);
                    var tabLayout = child as TabLayout;
                    if (tabLayout != null)
                    {
                        tabLayout.TabMode = TabLayout.ModeScrollable;
                    }
                }


                public static void Init()
                {
                    var unused = DateTime.UtcNow;
                }

                private CustomTabbedPage FormsTabbedPage => Element as CustomTabbedPage;
                private Android.Graphics.Color _selectedColor = Android.Graphics.Color.Black;
                private static readonly Android.Graphics.Color DefaultUnselectedColor = Xamarin.Forms.Color.Gray.ToAndroid();
                private static Android.Graphics.Color _barBackgroundDefault;
                private Android.Graphics.Color _unselectedColor = DefaultUnselectedColor;

                ViewPager _viewPager;
                TabLayout _tabLayout;

                protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
                {

                    base.OnElementChanged(e);

                    // Get tabs
                    for (var i = 0; i < ChildCount; i++)
                    {
                        var v = GetChildAt(i);
                        var pager = v as ViewPager;
                        if (pager != null)
                            _viewPager = pager;
                        else if (v is TabLayout)
                            _tabLayout = (TabLayout)v;
                    }


                    if (e.OldElement != null)
                    {
                        _tabLayout.TabSelected -= TabLayout_TabSelected;
                        _tabLayout.TabUnselected -= TabLayout_TabUnselected;
                    }

                    if (e.NewElement != null)
                    {
                        _barBackgroundDefault = (_tabLayout.Background as ColorDrawable)?.Color ??
                            Android.Graphics.Color.Blue;
                        SetSelectedColor();
                        SetBarBackgroundColor();
                        _tabLayout.TabSelected += TabLayout_TabSelected;
                        _tabLayout.TabUnselected += TabLayout_TabUnselected;

                        SetupTabColors();
                        SelectTab(0);
                    }

                }

                void SelectTab(int position)
                {
                    if (_tabLayout.TabCount > position)
                    {
                        _tabLayout.GetTabAt(position).Icon?
                            .SetColorFilter(_selectedColor, PorterDuff.Mode.SrcIn);
                        _tabLayout.GetTabAt(position).Select();
                    }
                    else
                    {
                        throw new IndexOutOfRangeException();
                    }
                }


                void SetupTabColors()
                {
                    _tabLayout.SetSelectedTabIndicatorColor(_selectedColor);
                    _tabLayout.SetTabTextColors(_unselectedColor, _selectedColor);
                    for (int i = 0; i < _tabLayout.TabCount; i++)
                    {
                        var tab = _tabLayout.GetTabAt(i);
                        tab.Icon?.SetColorFilter(_unselectedColor, PorterDuff.Mode.SrcIn);
                    }
                }

                private void TabLayout_TabUnselected(object sender, TabLayout.TabUnselectedEventArgs e)
                {
                    var tab = e.Tab;
                    tab.Icon?.SetColorFilter(_unselectedColor, PorterDuff.Mode.SrcIn);
                }

                private void TabLayout_TabSelected(object sender, TabLayout.TabSelectedEventArgs e)
                {
                    var tab = e.Tab;
                    _viewPager.CurrentItem = tab.Position;
                    tab.Icon?.SetColorFilter(_selectedColor, PorterDuff.Mode.SrcIn);
                }

                protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
                {
                    int lastPosition = _tabLayout.SelectedTabPosition;
                    switch (e.PropertyName)
                    {
                        case nameof(CustomTabbedPage.BarBackgroundColor):
                        case nameof(CustomTabbedPage.BarBackgroundApplyTo):
                            SetBarBackgroundColor();
                            SetupTabColors();
                            SelectTab(lastPosition);
                            break;
                        case nameof(CustomTabbedPage.SelectedColor):
                            SetSelectedColor();
                            SetupTabColors();
                            SelectTab(lastPosition);
                            break;
                        default:
                            base.OnElementPropertyChanged(sender, e);
                            break;
                    }
                }

                private void SetSelectedColor()
                {

                    if (FormsTabbedPage.SelectedColor != default(Xamarin.Forms.Color))
                        _selectedColor = FormsTabbedPage.SelectedColor.ToAndroid();
                }

                private void SetBarBackgroundColor()
                {
                    if (FormsTabbedPage.BarBackgroundApplyTo.HasFlag(BarBackgroundApplyTo.Android))
                    {
                        _tabLayout.SetBackgroundColor(FormsTabbedPage.BarBackgroundColor.ToAndroid());
                        _unselectedColor = FormsTabbedPage.BarBackgroundColor != default(Xamarin.Forms.Color)
                            ? FormsTabbedPage.BarBackgroundColor.ToAndroid()
                            : DefaultUnselectedColor;
                    }
                    else
                    {
                        _tabLayout.SetBackgroundColor(_barBackgroundDefault);
                        _unselectedColor = DefaultUnselectedColor;
                    }
                }
            }
        }