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