2017-06-16 7 views
0

Image shows versions 7.1 and 4.4,the top two images are the default ones, to the bottom two we added some customization ,see descriptionXamarin.FormsからAndroid 4.4のハンバーガーアイコンにパディングを設定できますか?

私は何を達成したいことは、それがずっと7.1のようなアクションバー/画面(の端から右に起動しないようにアンドロイド4.4ハンバーガーボタンを前面にスペースを持っているということです、ご覧くださいスクリーンショット)。ハンバーガーボタンにパディングを追加できますか?Xamarin.FormsをXamarin Studioで使用しています。

アクションバーにカスタムビューを追加すると、問題が悪化するように見えますが、ハンバーガーボタンを左にもっと大きく設定し、画面に完全には収まりません。

これは、アクションバーにカスタムビューを追加する方法の関連部分です。カスタムNavigationRendererでこれを行い、コードからUIを実行します。

actionBar.SetDisplayShowCustomEnabled(true); 
    LinearLayout linearLayout = new LinearLayout(activity); 
      linearLayout.SetGravity(GravityFlags.CenterVertical); 
      LinearLayout.LayoutParams textViewParameters = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MatchParent, LinearLayout.LayoutParams.MatchParent); 

      switch (activity.Resources.DisplayMetrics.DensityDpi) 
      { 
       case DisplayMetricsDensity.Xhigh: 
        textViewParameters.RightMargin = (int)(48 * activity.Resources.DisplayMetrics.Density); 
        break; 
       case DisplayMetricsDensity.Xxhigh: 
        textViewParameters.RightMargin = (int)(64 * activity.Resources.DisplayMetrics.Density); 
        break; 
       default: 
        textViewParameters.RightMargin = (int)(48 * activity.Resources.DisplayMetrics.Density); 
        break; 
      } 

      TextView modelTitle = new TextView(activity); 
      modelTitle.Text = view; 
      modelTitle.Gravity = GravityFlags.Center; 
      modelTitle.TextSize = 17f; 
      Typeface type = Typeface.CreateFromAsset(Forms.Context.Assets, "abc.ttf"); 
      modelTitle.SetTypeface(type, TypefaceStyle.Bold); 
      modelTitle.SetTextColor(Android.Graphics.Color.White); 
      linearLayout.AddView(modelTitle, textViewParameters); 
     ActionBar.LayoutParams actionbarParams = 
         new ActionBar.LayoutParams(ActionBar.LayoutParams.MatchParent, ActionBar.LayoutParams.MatchParent); 

     activity.ActionBar.SetCustomView(linearLayout, actionbarParams); 

(私も(私は同じハンバーガーアイコンの前にスペースを追加し、それが仕事をするだろう)描画可能にハンバーガーのアイコンを変更しようとしましたが、私は戻るボタンを使用してバックページにナビゲートしたら、同じアクションバーから)、私のアイコンはデフォルトのハンバーガーボタンに再び置き換えられます。

ご協力いただきありがとうございます。ありがとうございます!

編集:

public class MainView : MasterDetailPage 
    { 
      public MainView(parameter){ 
      ...... 

      sideMenu = new CustomContentPage();//my custom Content Page with listview items 
      base.MasterBehavior = MasterBehavior.Split; 
      sideMenu.Padding = new Thickness(0, Device.OnPlatform(50, 0, 0), 0, 0); 
      Master = sideMenu; 
      ....... 
      } 
    ... 
    } 

    public class App : Application 
    { 
     private MainView lcMenu = null; 
     ..... 
     if (lcMenu == null) 
       { 
        MustSet = true; 
        lcMenu = new MainView(parameter); 
        lcMenu.RequestPage += LcMenu_RequestPage; 
       } 
     .... 
     MainPage = lcMenu; 
    } 

答えて

0

これは、私たちが行動にカスタムNavigationRendererでこれを行うと、我々はコードからUIを行うbar.Weをカスタムビューを追加する方法の関連する部分です。

XFのMasterDetailPageではなく、独自のマスターディテールを作成しているようですか?わからないけど、あなたが間違った方向に行ったと思う、ハンバーガーのパッディングを設定するためにボタンをカスタマイズする必要があるMasterDetailPage

ハンバーガーアイコンをdrawableに変更しようとしました(同じハンバーガーアイコンの前にスペースを追加していますが、それは仕事をするでしょうが)、戻るボタンを使用してページに戻ると同じアクションバー)、私のアイコンはデフォルトのハンバーガーボタンに再び置き換えられます。

私が言ったように、我々はレンダラで、MasterDetailPageをカスタマイズすることができ、我々は例えば、ハンバーガーボタンのImageButtonを見つけることができます。

public class MyMasterDetailRenderer : MasterDetailPageRenderer 
{ 

    protected override void OnLayout(bool changed, int l, int t, int r, int b) 
    { 
     base.OnLayout(changed, l, t, r, b); 
     var toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar); 
     for (var i = 0; i < toolbar.ChildCount; i++) 
     { 
      var imageButton = toolbar.GetChildAt(i) as ImageButton; 

      var drawerArrow = imageButton?.Drawable as DrawerArrowDrawable; 
      if (drawerArrow == null) 
       continue; 
      //set drawable 
      imageButton.SetImageDrawable(Forms.Context.GetDrawable(Resource.Drawable.hamburger)); 
      //set padding 
      imageButton.SetPadding(80, 30, 80, 30); 
      //set background 
      imageButton.SetBackgroundColor(Android.Graphics.Color.Red); 
     } 

    } 

} 
+0

こんにちはGrace.Thanksごanswer.iため、このコードを考えますツールバーのみで動作します。私たちはアクションバーを使用しています。動作させるには手間がかかりましたが、できませんでした。 –

+0

@TamasNorbert、そうではありません。なぜなら、私はあなた自身のマスター詳細ページを、 XFの「MasterDetailPage」です。公式の 'MasterDetailPage'によって' Toolbar'が使用されます。自分でカスタマイズすることを主張する場合は、レイアウトコードなどを投稿する必要があります。 –

+0

。MasterDetailPageを自分自身でカスタマイズすることを主張するのではなく、プロジェクトが最新の段階にあり、変更するにはあまりにも多くのオーバーヘッドが必要であり、 が不必要なバグを導入しないようにする必要があります。私はいくつかの追加情報を掲載しました、元の投稿に私の編集を参照してください!注:私も誤ってあなたの投稿を編集し、そこに私のコードを追加しました、ごめんなさい! –

関連する問題