我'有一些导航页面,我想覆盖后退按钮的颜色和我的下一个按钮( ToolbarItem )
我已尝试 BarTextColor 属性,但它会更改所有导航标题文字的颜色。
它在内部监督办公室完成,但我'无法找到Android的解决方案。
它适用于标题,但不适用于图标。
这是我的代码:
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
var page = this.Element as NavigationPage;
if (page != null && toolbar != null)
{
toolbar.SetTitleTextColor(Color.Black.ToAndroid());
if (toolbar.NavigationIcon != null)
toolbar.NavigationIcon.SetColorFilter(Color.Green.ToAndroid(), Android.Graphics.PorterDuff.Mode.Multiply);
if (toolbar.OverflowIcon != null)
toolbar.OverflowIcon.SetColorFilter(Color.Green.ToAndroid(), Android.Graphics.PorterDuff.Mode.Multiply);
}
}
答案 0 :(得分:2)
我有一些导航页面,我想覆盖后退按钮和下一个按钮(ToolbarItem)的颜色
您的下一个按钮是ToolbarItem
,由您自己定义。所以定制它不会有问题。困难的部分在于后退按钮,因为它由Xamarin.Forms
提供。您需要覆盖NavigationPageRenderer
以更改颜色:
public class MyNavigationPageRenderer : NavigationPageRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<NavigationPage> e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
var navController = (INavigationPageController)e.NewElement;
navController.PushRequested += NavController_PushRequested;
navController.PopRequested += NavController_PopRequested;
}
}
private void NavController_PopRequested(object sender, Xamarin.Forms.Internals.NavigationRequestedEventArgs e)
{
Device.StartTimer(TimeSpan.FromMilliseconds(220), () =>
{
ChangeIconColor();
return false;
});
}
private void NavController_PushRequested(object sender, Xamarin.Forms.Internals.NavigationRequestedEventArgs e)
{
ChangeIconColor();
}
private void ChangeIconColor()
{
int count = this.ViewGroup.ChildCount;
var toolbar = GetToolbar();
if (toolbar.NavigationIcon != null)
{
var drawable = (toolbar.NavigationIcon as DrawerArrowDrawable);
drawable.Color = Resource.Color.material_grey_850;//set the navigation icon color here
}
}
private AToolbar GetToolbar()
{
for (int i = 0; i < this.ViewGroup.ChildCount; i++)
{
var child = this.ViewGroup.GetChildAt(i);
if (child is AToolbar)
{
return (AToolbar)child;
}
}
return null;
}
}
对上述代码的一点解释:当您将新页面推送到导航页面时,PushRequest
和PopRequest
会触发,这是您自定义现有工具栏的最佳时间{{ 1}}。因此,首先使用NavigationIcon
找到工具栏,然后按GetToolbar
更改图标颜色。