2017-06-16 47 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 description我可以在Xamarin.Forms中爲Android 4.4的漢堡包圖標設置填充嗎?

我想實現的是,在Android 4.4的漢堡包按鈕在前面的空間,使其不從動作條/屏(很像7.1的邊緣右側啓動,請參閱屏幕截圖)。我可以在漢堡按鈕上添加填充嗎?我正在Xamarin Studio中使用Xamarin.Forms。

當我們向操作欄添加一個自定義視圖時,問題似乎更糟,它將漢堡包按鈕設置爲更多左邊我認爲,並不完全適合屏幕,並以某種方式「切斷它」。

這是我們如何將自定義視圖添加到操作欄的相關部分。我們使用自定義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

這是我們如何自定義視圖添加到操作bar.We相關部分做一個自定義NavigationRenderer,我們做的代碼UI。

似乎你正在創建自己的主細節而不是使用XF的MasterDetailPage?不確定,但我認爲你走錯了方向,因爲我們需要自定義MasterDetailPage來設置漢堡包按鈕的填充。

我也試圖漢堡包圖標更改爲繪製(我同樣的漢堡包圖標之前加一個空格,它會做的工作),但一旦我導航回使用返回按鈕的頁面(從相同的操作欄),我的圖標再次被默認的漢堡包按鈕取代。

正如我所說的,我們可以自定義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',它使用'工具欄'。如果您堅持自己定製,則需要發佈佈局代碼等。 –

+0

。這並不是要堅持自己定製MasterDetailPage,但是該項目已進入最新階段,並且要花費太多的時間來修改它,並確保我們不會引入不需要的錯誤。我發佈了一些額外的信息,請看我的編輯到原來的帖子!注意:我也意外地編輯了你的文章並在那裏添加了我的代碼,對不起! –

相關問題