0

我正在尝试根据选项卡上显示的页面状态在我的 Xamarin 应用程序的 TabbedView 中的选项卡上设置图标。我可以单独访问一个选项卡并在 Android 手机模拟器上渲染期间设置其图标,但它不适用于 Android 平板电脑模拟器。

我根据这篇文章在 TabbedRenderer 中使用 DispatchDraw 方法,但我对该方法的调用方式并没有很好的理解,并且很难找到有关它的指导。

我的代码确实在两个设备中都被调用,但我发现 (this.Context as Activity).ActionBar.TabCount 每次检查时在平板电脑中都是 0,虽然它最初是 0,但随后第二次调用 DispatchDraw 并且它在手机上的值为 2(即标签已加载),但在平板电脑上没有。这就是允许我在手机上设置图标的原因,但不能在平板电脑上设置。

知道仅基于模拟器的更改会有什么不同,以使它们以这种方式呈现不同吗?

这是我的 TabbedRenderer 代码:

[assembly: ExportRenderer(typeof(FormTabbedPage), typeof(ExtendedTabbedPageRenderer))]
namespace MyNamespace
{
    public class ExtendedTabbedPageRenderer: TabbedRenderer
    {
        public ExtendedTabbedPageRenderer(Context context) : base(context) { }

        protected override void DispatchDraw(global::Android.Graphics.Canvas canvas)
        {
            base.DispatchDraw(canvas);

            SetTabIcons();
        }

        private void SetTabIcons()
        {

            var element = this.Element;
            if (null == element)
            {
                return;
            }

            Activity activity = this.Context as Activity;
            if ((null != activity && null != activity.ActionBar && activity.ActionBar.TabCount > 0))
            {
                bool hasErrors = false;
                for (int i = 0; i < element.Children.Count; i += 1)
                {
                    hasErrors = ((i % 2) > 0); // This is a placeholder for app specific logic based on page content
                    int resourceID = Resources.GetIdentifier("error", "drawable", Context.PackageName);
                    if (hasErrors)
                    {
                        Drawable icon = Context.GetDrawable(resourceID);
                        Android.App.ActionBar.Tab tab = activity.ActionBar.GetTabAt(i);
                        tab.SetIcon(icon);
                    }
                }


            }
        }

        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
           // do nothing - I have this method for debugging purposes
        }

}

我发现在平板电脑上,如果我最初呈现表单,我不会得到图标,但是如果我然后单击其中一个选项卡,并且如果我在 OnElementPropertyChanged 方法而不是 DispatchDraw 中运行选项卡逻辑,通过然后 ActionBar 上的选项卡被填充,我得到了显示的图标。

(旁注:另一件奇怪的事情是 ActionBar 类上有一个警告说它已过时 - 不知道该怎么做,因为 Activity 类包含它作为一个属性并且这并没有过时。)

非常感谢!

4

0 回答 0