我正在使用Xamarin.Forms,我在Android上运行2件事时遇到了问题:
我希望页面标题居中,就像在iOS上一样。
MainPage = new NavigationPage(
new LoginPage(){Title = "Center"}) {BarBackgroundColor = Color.Transparent});
任何人都可以帮我吗?
答案 0 :(得分:8)
我最近遇到了同样的问题,我在MasterDetailPage
中使用Xamarin.Forms
而在android中它没有将标题设置为居中。
因此,显而易见的路线是创建自定义渲染器和override
其OnLayout
方法,并找到工具栏的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(),请告诉我。
希望有所帮助