Xamarin.Forms中心标题和透明导航栏 - Android

时间:2015-10-20 06:33:03

标签: android android-layout xamarin xamarin.android xamarin.forms

我正在使用Xamarin.Forms,我在Android上运行2件事时遇到了问题:

  1. 我想将ActionBar设置为透明,设置BarBackgroundColor适用于所有颜色,但不适用于透明。
  2. 我希望页面标题居中,就像在iOS上一样。

    MainPage = new NavigationPage(
           new LoginPage(){Title = "Center"}) {BarBackgroundColor = Color.Transparent});
    
  3. 任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:8)

我最近遇到了同样的问题,我在MasterDetailPage中使用Xamarin.Forms而在android中它没有将标题设置为居中。

因此,显而易见的路线是创建自定义渲染器和overrideOnLayout方法,并找到工具栏的TextView并将其Gravity设置为{{ 1}},好吗?

但是,当我尝试这样做Center时,它只是不起作用。我尝试设置myTextView.Gravity = Android.Views.GravityFlags.Center但没有效果。

所以最后我计算了中心X位置并设置ForegroundGravity X位置和VOILLA!它现在在中心。这是我的解决方案。

TextView

答案 1 :(得分:2)

您需要创建自定义渲染器才能实现此目的。

[assembly: ExportRenderer (typeof(NavigationPage), typeof(NavigationPageRenderer))]
namespace Droid
{

public class NavigationPageRenderer : NavigationRenderer
{

    protected override void OnElementChanged (ElementChangedEventArgs<NavigationPage> e)
    {
        base.OnElementChanged (e);

        ApplyTransparency ();
    }

    protected override bool DrawChild (Android.Graphics.Canvas canvas, Android.Views.View child, long drawingTime)
    {
        ApplyTransparency ();
        return base.DrawChild (canvas, child, drawingTime);
    }

    void ApplyTransparency ()
    {
        var activity = ((Activity)Context);
        var actionBar = activity.ActionBar;
        actionBar.SetIcon (Resource.Drawable.actionbaricon);
        actionBar.SetBackgroundDrawable (null);
    }
}
}

对我而言,它只能使用OnElementChanged和DrawChild调用RemoveAppIconFromActionBar,否则,当您导航到其他页面时,它会不断添加条形分隔符。

您还需要将Window.RequestFeature (WindowFeatures.ActionBarOverlay);添加到MainActivity类。

如果有人找到更好的方法而不是使用DrawChild(),请告诉我。

希望有所帮助