我用一个模板创建了一个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>
颜色是青色,我将其更改为橙色,但是正如您在屏幕截图中所看到的,在某些元素中,颜色没有变化,但是青色仍然存在 这是一个示例:
您还可以下载示例应用程序:GitHub
答案 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;
}
}
}
}