2017-06-16 6 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 descriptionKann ich ein Padding auf das Hamburger-Symbol auf Android 4.4 von Xamarin.Forms setzen?

Was ich will ist erreichen, dass auf Android 4.4 die Hamburger, um einen Raum vor zu haben, so dass es nicht richtig von der Kante des Aktionsleiste/Bildschirm startet (ähnlich wie bei 7.1, siehe screenshot) .Kann ich der Hamburger-Schaltfläche ein Padding hinzufügen? Ich verwende Xamarin.Forms mit Xamarin Studio.

Das Problem scheint schlimmer zu sein, wenn wir eine benutzerdefinierte Ansicht der Aktionsleiste hinzufügen, es setzt den Hamburger-Knopf mehr links, denke ich, und passt nicht ganz in den Bildschirm und irgendwie "schneidet es ab".

Dies ist der relevante Teil, wie wir die benutzerdefinierte Ansicht der Aktionsleiste hinzufügen. Wir tun dies mit einem benutzerdefinierten NavigationRenderer und wir machen die Benutzeroberfläche aus Code.

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); 

Ich habe auch versucht die Hamburger Symbol auf einem ziehbaren zu ändern (Ich habe einen Platz vor dem gleichen Hamburger Symbol, und es würde die Arbeit tun), aber sobald ich navigieren zurück auf die Seite der Rücktaste (aus der gleichen Aktionsleiste), wird mein Icon wieder durch die Standard-Hamburger-Taste ersetzt.

Ich würde jede Hilfe schätzen. Danke!

Edit:

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; 
    } 

Antwort

0

Dies ist der relevante Teil davon, wie wir die kundenspezifische Sicht auf die Aktion bar.We tun dies mit einem benutzerdefinierten NavigationRenderer hinzufügen und wir tun, um die Benutzeroberfläche von Code.

Scheint, dass Sie Ihr eigenes Master-Detail erstellen, anstatt die MasterDetailPage von XF zu verwenden? Nicht sicher, aber ich denke, dass Sie die falsche Richtung gegangen sind, für das Einstellen des Auffüllens des Hamburgers Knopfes müssen wir MasterDetailPage besonders anfertigen.

Ich versuchte auch zu einem ziehbaren des Hamburgeren Symbol zu ändern (Ich habe einen Platz vor dem gleichen Hamburgeren Symbol, und es würde die Arbeit tun), aber wenn ich zu der Seite, mit der Zurück-Taste zurück (von die gleiche Aktionsleiste), wird mein Icon wieder durch die Standard-Hamburger-Taste ersetzt.

Wie gesagt, können wir die MasterDetailPage, in den Renderer anpassen, wir die ImageButton für Hamburger-Taste, zum Beispiel finden:

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

Hallo Grace.Thanks für Ihren answer.i dieser Code denken funktioniert nur für die Symbolleiste. Wir verwenden eine Aktionsleiste. Ich habe versucht, es funktioniert, aber ich konnte nicht –

+0

@TamasNorbert, nicht genau, deshalb habe ich gesagt, sieht aus wie Sie Ihre eigene Master-Detailseite anpassen, anstatt direkt mit der ' MasterDetailPage' von XF. Auf der offiziellen 'MasterDetailPage' wird' Toolbar' verwendet. Wenn Sie darauf bestehen, sich selbst anzupassen, müssen Sie den Layout-Code und so weiter veröffentlichen. –

+0

.Es geht nicht darum, die MasterDetailPage selbst anzupassen, aber das Projekt ist in seiner neuesten Phase, und würde zu viel Aufwand arbeiten, um es zu ändern und sicherzustellen, dass wir keine unerwünschten Bugs einführen. Ich habe ein paar zusätzliche Informationen gepostet, siehe meine Edit zum ursprünglichen Post !. Hinweis: Ich habe auch versehentlich Ihren Post bearbeitet und dort meinen Code hinzugefügt, sorry! –

Verwandte Themen