カスタムレンダラーからアクションバーにアクセスしようとしています(私はtoolbar.xmlを使用できますが、私の状況に合っていません)。 はここアンドロイド用のNavigationPageレンダリング。 Xamarinフォーム
[assembly: ExportRenderer(typeof(NavigationPage), typeof(NoviNavigationPageRenderer))]
namespace NoviMobileTest.Droid.Renderers
{
public class NoviNavigationPageRenderer : PageRenderer
{
protected override void OnLayout(bool changed, int l, int t, int r, int b)
{
base.OnLayout(changed, l, t, r, b);
var actionBar = ((Activity)Context).ActionBar;
actionBar.SetBackgroundDrawable(Resources.GetDrawable(Resource.Drawable.YourImageInDrawable));
}
}
}
変数actionbar
は常にnullである私のコードです。私もNavigationRendererを拡張しようとしましたが、私はクラスキャスト例外を取得します。私は同じ問題を抱えている多くの人を見てきましたが、そこには例がないことは驚くべきことです。どのようにツールバーのインスタンスを取得すると思いますか?
注:最後に
using Plugin.CurrentActivity;
...
private static Android.Support.V7.Widget.Toolbar GetToolbar() => (CrossCurrentActivity.Current?.Activity as MainActivity)?.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
:
protected override void OnLayout(bool changed, int l, int t, int r, int b)
{
base.OnLayout(changed, l, t, r, b);
var actionBar = GetToolbar();
actionBar.SetBackgroundDrawable(Resources.GetDrawable(Resource.Drawable.YourImageInDrawable));
}
私MainActivityは
となります。actionBarはXamarin.Forms.Forms.Contextを使用する 'コンテキスト'です。 – cvanbeek
いいえ、Android.Content.Contextです。私もフォームを試みたが、まだnullを返します –
それはあなたの問題です。そのコンテキストはアプリの実際のアクティビティではないため、アクションバーはありません。ウィルソン・バルガスのようにあなたのアプリの現在の活動を利用する必要があります。 – cvanbeek