你能改变拾荒者特定物品的颜色吗?我目前有一个选择器,这是一个小数列表。我想一些值有红色,如果值是高于或低于一定的数字。和中间的值以具有默认颜色。这是可能的,或者我应该使用CollectionView代替?
b09cbbtk1#
经过一番研究,我有了一个解决办法。这是一个很多的代码,所以我已经开始了一个完整的解决方案Repo。您需要的是自定义选择器控件。我们使用handler。我们需要做的是控制显示选择器项的View。每个平台都不一样。在iOS中,我们使用delegate来访问picker视图。
private class UIPickerViewDelegateEx : UIPickerViewDelegate { private readonly IPicker _picker; private readonly UIColor[] colors; public UIPickerViewDelegateEx(IPicker picker) { _picker = picker; colors = new UIColor[] { UIColor.Green, UIColor.Purple, UIColor.Blue, UIColor.Yellow, UIColor.Magenta }; } public override UIView GetView(UIPickerView pickerView, nint row, nint component, UIView view) { var colorIndex = row % 5; var color = colors[colorIndex]; UILabel label = new UILabel { Text = _picker.GetItem((int)row), TextColor = color, BackgroundColor = UIColor.White, TextAlignment = UITextAlignment.Center }; DispatchQueue.MainQueue.DispatchAsync(() => { if (pickerView.ViewFor(row, component) is UILabel updatedLabel) { updatedLabel.TextColor = UIColor.Red; updatedLabel.BackgroundColor = UIColor.LightGray; updatedLabel.Font = UIFont.BoldSystemFontOfSize(label.Font.PointSize); } }); return label; } public override void Selected(UIPickerView pickerView, nint row, nint component) { _picker.SelectedIndex = (int)row; } }
在Android中,MAUI团队使用了AppCompatAlertDialog,而不是微调器。他们已经使它无法访问,所以我'借用'的代码,并添加了一个适配器来控制选择器项目。
AppCompatAlertDialog
private class ArrayAdapterEx : ArrayAdapter<string> { private readonly IPicker virtualView; private readonly Android.Graphics.Color[] colors; public ArrayAdapterEx(Context context, int textViewResourceId, string[] objects, IPicker virtualView) : base(context, textViewResourceId, objects) { this.virtualView = virtualView; colors = new Android.Graphics.Color[] { Android.Graphics.Color.Green, Android.Graphics.Color.Purple, Android.Graphics.Color.Blue, Android.Graphics.Color.Yellow, Android.Graphics.Color.Magenta }; } public override View GetView(int position, View convertView, ViewGroup parent) { View view = base.GetView(position, convertView, parent); TextView textView = view.FindViewById<TextView>(Android.Resource.Id.Text1); var colorIndex = position % 5; var color = colors[colorIndex]; var item = GetItem(position); // Exampel of how to get current item if (position == virtualView.SelectedIndex) { textView.SetTextColor(Colors.Red.ToPlatform()); textView.SetBackgroundColor(Colors.LightGray.ToPlatform()); textView.Typeface = Typeface.DefaultBold; } else { textView.SetTextColor(color); textView.SetBackgroundColor(Colors.White.ToPlatform()); } textView.Gravity = Android.Views.GravityFlags.Center; return view; } }
看看Repo,看看这是不是你想要的。
1条答案
按热度按时间b09cbbtk1#
经过一番研究,我有了一个解决办法。这是一个很多的代码,所以我已经开始了一个完整的解决方案Repo。
您需要的是自定义选择器控件。我们使用handler。
我们需要做的是控制显示选择器项的View。每个平台都不一样。在iOS中,我们使用delegate来访问picker视图。
在Android中,MAUI团队使用了
AppCompatAlertDialog
,而不是微调器。他们已经使它无法访问,所以我'借用'的代码,并添加了一个适配器来控制选择器项目。看看Repo,看看这是不是你想要的。