控制颜色不变

时间:2018-07-11 07:58:09

标签: c# xamarin.forms xamarin.android

我用一个模板创建了一个Xamarin.Forms项目。我在文件db.people.findAndModify({ query: { "personId": "5b45b3700fdd1a14c9f" }, update: { "$set": {"basicInfo.name": "new name" } } } }) styles.xml中更改了Android的颜色,但是某些控件没有更改其颜色:TableView.Title控件和自定义nugets控件。

colors.xml文件:原色为深蓝色,口音为橙色

colors.xml

styles.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<resources>
    <color name="primaryColor">#344955</color>
    <color name="primaryDarkColor">#232F34</color>
    <color name="primaryLightColor">#4A6572</color>

    <color name="accentColor">#F9AA33</color>
    <color name="accentDarkColor">#c17b00</color>
    <color name="accentLightColor">#ffdc65</color>

    <color name="primaryTextColor">#000000</color>
    <color name="secondaryTextColor">#ffffff</color>
</resources>

颜色是青色,我将其更改为橙色,但是正如您在屏幕截图中所看到的,在某些元素中,颜色没有变化,但是青色仍然存在 这是一个示例:

enter image description here

您还可以下载示例应用程序:GitHub

1 个答案:

答案 0 :(得分:1)

您需要使用CustomRenderer。

public partial class ColoredTableView : TableView
   {
       public static BindableProperty GroupHeaderColorProperty = BindableProperty.Create("GroupHeaderColor", typeof(Color), typeof(ColoredTableView), Color.White);
       public Color GroupHeaderColor
       {
           get
           {
               return (Color)GetValue(GroupHeaderColorProperty);
           }
           set
           {
               SetValue(GroupHeaderColorProperty, value);
           }
       }

       public ColoredTableView()
       {
           InitializeComponent();
       }
   }

而且,在Android中:

[assembly: ExportRenderer(typeof(ColoredTableView), typeof(ColoredTableViewRenderer))]
namespace YOUR_ANDROID_NAMESPACE
{
    public class ColoredTableViewRenderer : TableViewRenderer
    {

        protected override TableViewModelRenderer GetModelRenderer(Android.Widget.ListView listView, TableView view)
        {
            return new CustomHeaderTableViewModelRenderer(Context, listView, view);
        }

        private class CustomHeaderTableViewModelRenderer : TableViewModelRenderer
        {
            private readonly ColoredTableView _coloredTableView;

            public CustomHeaderTableViewModelRenderer(Context context, Android.Widget.ListView listView, TableView view) : base(context, listView, view)
            {
                _coloredTableView = view as ColoredTableView;
            }

            public override Android.Views.View GetView(int position, Android.Views.View convertView, ViewGroup parent)
            {
                var view = base.GetView(position, convertView, parent);

                var element = GetCellForPosition(position);

                // section header will be a TextCell
                if (element.GetType() == typeof(TextCell))
                {
                    try
                    {
                        // Get the textView of the actual layout
                        var textView = ((((view as LinearLayout).GetChildAt(0) as LinearLayout).GetChildAt(1) as LinearLayout).GetChildAt(0) as TextView);

                        // get the divider below the header
                        var divider = (view as LinearLayout).GetChildAt(1);

                        // Set the color
                        textView.SetTextColor(_coloredTableView.GroupHeaderColor.ToAndroid());
                        textView.TextAlignment = Android.Views.TextAlignment.Center;
                        textView.Gravity = GravityFlags.CenterHorizontal;
                        divider.SetBackgroundColor(_coloredTableView.GroupHeaderColor.ToAndroid());
                    }
                    catch (Exception) { }
                }

                return view;
            }
        }
    }
}