我正在爲Android和iOS操作系統創建xamarin表單跨平臺應用程序。我必須在兩個操作系統(在Android中稱爲ToolBar,在ios中稱爲UINavigationBar)向AppBars添加漸變,有沒有什麼辦法可以實現這一點。請幫助我應付任何事情。如何在Xamarin表單中添加漸變工具欄和UINavigationBar
回答
您應該使用自定義的渲染,就像這樣:
在您的PCL或共享項目:
public class NavigationPageGradientHeader : NavigationPage
{
public NavigationPageGradientHeader(Page root) : base(root)
{
}
public static readonly BindableProperty RightColorProperty =
BindableProperty.Create(propertyName: nameof(RightColor),
returnType: typeof(Color),
declaringType: typeof(NavigationPageGradientHeader),
defaultValue: Color.Accent);
public static readonly BindableProperty LeftColorProperty =
BindableProperty.Create(propertyName: nameof(LeftColor),
returnType: typeof(Color),
declaringType: typeof(NavigationPageGradientHeader),
defaultValue: Color.Accent);
public Color RightColor
{
get { return (Color)GetValue(RightColorProperty); }
set { SetValue(RightColorProperty, value); }
}
public Color LeftColor
{
get { return (Color)GetValue(LeftColorProperty); }
set { SetValue(LeftColorProperty, value); }
}
}
[更新]
因爲@Dehan Wjiesekara對於我花時間創建示例的這個問題絕望,你可以在中看到它。
然後在您的Android項目:
[assembly: ExportRenderer(typeof(NavigationPageGradientHeader), typeof(NavigationPageGradientHeaderRenderer))]
namespace YournameSpace.Droid
{
public class NavigationPageGradientHeaderRenderer : NavigationRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<NavigationPage> e)
{
base.OnElementChanged(e);
//run once when element is created
if (e.OldElement != null || Element == null)
{
return;
}
var control = (NavigationPageGradientHeader)this.Element;
var context = (MainActivity)this.Context;
context.ActionBar.SetBackgroundDrawable(new GradientDrawable(GradientDrawable.Orientation.RightLeft, new int[] { control.RightColor.ToAndroid(), control.LeftColor.ToAndroid() }));
}
}
}
如果您使用您的MainActivity
FormsAppCompatActivity
在gradient
只需添加一個可繪製這樣的:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<gradient
android:angle="180"
android:centerColor="#26C986"
android:endColor="#109F8D"
android:startColor="#36ED81"
android:type="linear" />
</shape>
然後在您Toolbar.axml
文件調用此繪製:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/gradient"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
而在你的iOS項目:
[assembly: ExportRenderer(typeof(NavigationPageGradientHeader), typeof(NavigationPageGradientHeaderRenderer))]
namespace YourNameSpace.iOS
{
public class NavigationPageGradientHeaderRenderer: NavigationRenderer
{
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
var control = (NavigationPageGradientHeader)this.Element;
var gradientLayer = new CAGradientLayer();
gradientLayer.Bounds = NavigationBar.Bounds;
gradientLayer.Colors = new CGColor[] { control.RightColor.ToCGColor(), control.LeftColor.ToCGColor() };
gradientLayer.StartPoint = new CGPoint(0.0, 0.5);
gradientLayer.EndPoint = new CGPoint(1.0, 0.5);
UIGraphics.BeginImageContext(gradientLayer.Bounds.Size);
gradientLayer.RenderInContext(UIGraphics.GetCurrentContext());
UIImage image = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
NavigationBar.SetBackgroundImage(image, UIBarMetrics.Default);
}
}
}
最後在App.xaml.cs
文件稱這種控制是這樣的:
MainPage = new NavigationPageGradientHeader(new MainPage()) {
LeftColor = Color.FromHex("#109F8D"),
RightColor = Color.FromHex("#36ED81")
};
Hi @Wilson,我要試試你的解決方案。請告訴我如何找到程序集名稱。 –
嗨@威爾遜,我試過你的解決方案。但是我得到了一個錯誤,稱爲'給定的鍵不存在於'
如果你可以創建一個github項目,並分享這個..它會給更多的寶貴和清晰 –
- 1. iOS如何計算工具欄漸變?
- 2. Xamarin表單:複製主工具欄中的工具欄頁面
- 3. 如何在xamarin工具欄添加選擇器形成
- 4. 如何添加工具欄
- 5. 如何在單個活動中添加操作欄和工具欄?
- 6. 如何在工具欄下添加工具欄 - android
- 7. Xamarin Forms - 在工具欄中添加活動指示器(右側)
- 8. 如何使用Xamarin表單爲Android創建底部工具欄
- 9. 如何添加一個按鈕,工具欄和菜單
- 10. UINavigationBar漸變細節
- 11. 如何在XML佈局中添加選項卡和工具欄
- 12. 在Firefox中添加工具欄按鈕和菜單項
- 13. 如何使我的工具欄在colors.xml中具有漸變效果?
- 14. 如何以編程方式在工具欄面板中添加工具欄?
- 15. 如何更改工具欄菜單中的CheckBox顏色Xamarin Android?
- 16. 如何在Xamarin表格中添加評級欄
- 17. 如何添加工具欄固定snap.js
- 18. xcode - 如何添加工具欄到UITableViewController
- 19. jqGrid:如何添加水平工具欄
- 20. 如何開發IE8工具欄添加
- 21. 如何將CheckBox添加到工具欄?
- 22. 如何將textField添加到工具欄
- 23. 如何複製UINavigationBar的漸變顏色?
- 24. Xamarin - 工具欄無法在表單上顯示
- 25. 如何讓Qt圖標(在菜單欄和工具欄中)變大?
- 26. 在VB.Net的datagridview中添加工具欄
- 27. 在工具欄中添加tablayout
- 28. 在gmail頁面中添加工具欄
- 29. 在android工具欄中添加視圖
- 30. CKEditor將表單/輸入添加到工具欄中
不得已是使用的圖像,但我強烈不推薦。 – LeRoy
@LeRoy你有想法如何將圖像應用到Appbar –