현재 AppCompat을 사용하고 대부분의 페이지에서 제목 및 부제목을 설정하려는 프로젝트에서 작업하고 있습니다.Xamarin.Forms 맞춤형 Android NavigationPageRenderer 제목 및 부제목
AppCompat를 사용하면 속성을 설정하거나 사용자 지정보기를 사용하지 않아도 작동하지 않습니다.
AppCompat를 사용하지 않을 때는 예상대로 작동합니다. 감사합니다 @jimmgarr : 전체 소스 코드는 호기심 :
using System.ComponentModel;
using Android.App;
using Android.Widget;
using App1.Droid.Renderers;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
#if __APPCOMPAT__
using NavigationRenderer = Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer;
#else
using NavigationRenderer = Xamarin.Forms.Platform.Android.NavigationRenderer;
#endif
[assembly: ExportRenderer(typeof(NavigationPage), typeof(NavigationPageRenderer))]
namespace App1.Droid.Renderers
{
public class NavigationPageRenderer : NavigationRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<NavigationPage> e)
{
base.OnElementChanged(e);
SetCustomView(e.NewElement.CurrentPage.GetType().Name);
}
private void SetCustomView(string view)
{
var activity = (Activity)Context;
#if __APPCOMPAT__
var actionBar = ((FormsAppCompatActivity)Context).SupportActionBar;
#else
var actionBar = activity.ActionBar;
#endif
actionBar.Title = view;
actionBar.Subtitle = " -> " + view;
var abv = new LinearLayout(activity)
{
Orientation = Orientation.Vertical
};
var main = new TextView(activity)
{
Text = view,
};
main.SetTextColor(Color.Aqua.ToAndroid());
main.SetPadding(4, 4, 2, 6);
abv.AddView(main);
abv.AddView(new TextView(activity)
{
Text = " -> " + view
});
actionBar.SetDisplayShowCustomEnabled(true);
actionBar.CustomView = abv;
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName.Equals("CurrentPage"))
{
SetCustomView(((NavigationPage)sender).CurrentPage.GetType().Name);
}
}
}
}
편집이 있다면 here 그래서 그냥 응용 프로그램을 실행할 수 있습니다. AppCompbat와 "일반 모드"를 교대로 유지하기 위해 코드를 약간 변경했습니다. 코드는 사용 가능합니다 here
덕분에 - 마법처럼 작동합니다! 일부 컴파일러 문을 추가하고 AppCompat를 실행하지 않을 때 작동하도록 지시문을 사용했습니다. [gist] (https://gist.github.com/joacar/03b36c6fee955f7aed0a7b7b9e65225d)로 제공됩니다. – joacar