2017-11-28 28 views
0

カスタムレンダラーからアクションバーにアクセスしようとしています(私は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は

+0

となります。actionBarはXamarin.Forms.Forms.Contextを使用する 'コンテキスト'です。 – cvanbeek

+0

いいえ、Android.Content.Contextです。私もフォームを試みたが、まだnullを返します –

+0

それはあなたの問題です。そのコンテキストはアプリの実際のアクティビティではないため、アクションバーはありません。ウィルソン・バルガスのようにあなたのアプリの現在の活動を利用する必要があります。 – cvanbeek

答えて

1

はこのように、あなたのAndroidのプロジェクトでCurrentActivity Pluginをインストールしてみて、事前にFormsAppCompatActivity

感謝を拡張しますFこれ以上の情報はIconNavigationPageRenderer.cs

+0

提案をお寄せいただきありがとうございますが、残念ながらそれはまだnullを返します –

+1

あなたの提案は正しいものであり、実際には適切な文脈を返します。問題は、呼び出されたときにアクションバーが表示されていない間に、「NavigationPage」をレンダリングしていたことです。 –

関連する問題