Xamarin.Formsを使用していますが、Androidで2つの機能を動作させるのに問題があります。
IOSの場合と同じように、ページタイトルを中央に配置したいと思います。
MainPage = new NavigationPage(
new LoginPage(){Title = "Center"}) {BarBackgroundColor = Color.Transparent});
誰かがこれで私を助けることができますか?
最近同じ問題が発生しました。Xamarin.Forms
でMasterDetailPage
を使用していましたが、Androidでは、タイトルが中央に設定されていません。
したがって、明らかなルートは、カスタムレンダラーとoverride
のOnLayout
メソッドを作成し、ツールバーのTextView
を見つけて、そのGravity
をCenter
に設定することでした。
しかし、私がこれをやろうとすると、myTextView.Gravity = Android.Views.GravityFlags.Center
それはうまくいきません。 ForegroundGravity
を設定しようとしましたが、効果がありません。
最後に、中心のX位置を計算し、TextView
X位置とVOILLAを設定しました!現在は中央にあります。これが私の解決策です。
[Assembly: ExportRenderer(typeof(CustomMasterDetailPage), typeof(CustomMasterDetailPageRenderer))]
namespace myApp.Droid
{
public class CustomMasterDetailPageRenderer : 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 (int index = 0; index < toolbar.ChildCount; index++)
{
if (toolbar.GetChildAt(index) is TextView)
{
var title = toolbar.GetChildAt(index) as TextView;
float toolbarCenter = toolbar.MeasuredWidth / 2;
float titleCenter = title.MeasuredWidth / 2;
title.SetX(toolbarCenter - titleCenter);
}
}
}
}
}
これを実現するには、カスタムレンダラーを作成する必要があります。
_[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を呼び出すだけで機能しました。それ以外の場合は、他のページに移動すると、バーの仕切りが追加され続けます。
また、MainActivityクラスにWindow.RequestFeature (WindowFeatures.ActionBarOverlay);
を追加する必要があります。
DrawChild()を使用する代わりに、誰かがこれを行うためのより良い方法を見つけた場合は、私に知らせてください。
それが役に立てば幸い