Я написал CustomRenderer на XamarinForms, чтобы стилизовать мои средства выбора. Но в обычных средствах выбора я сталкиваюсь с проблемой: если я выберу их, но нажму в любом месте экрана, чтобы они расфокусировались, не нажимая на подсказки, они становятся непригодными для использования. Поэтому я больше не могу снова выбрать тот же сборщик, так как событие фокуса (или щелчка) больше не срабатывает. Как ни странно, у меня также есть средство выбора даты и времени с тем же стилизованным содержимым, где эта проблема не возникает...
XAML для средства выбора:
<CustomAndroidPicker:CustomAndroidPicker x:Name = "ParkPicker" ItemDisplayBinding = "{Binding Name}" Grid.Row = "6" Grid.Column = "0" Grid.ColumnSpan = "6" SelectedIndexChanged = "ParkSelectionChanged" />
И это код, который я подключил к своему CustomRenderer в конкретном проекте Android:
[assembly: ExportRenderer(typeof(CustomAndroidPicker), typeof(CustomPickerAndroid))]
namespace SolarmonAndroidApp.Droid
{
public class CustomPickerAndroid : PickerRenderer
{
public CustomPickerAndroid(Context context) : base (context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Picker> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.Background = Android.App.Application.Context.GetDrawable(Resource.Drawable.CustomAndroidEntryDraw);
Control.Gravity = GravityFlags.CenterHorizontal;
Control.SetPadding(5, 10, 5, 10);
}
}
}
}





На самом деле есть два PickerRenderer: Xamarin.Forms.Platform.Android.AppCompat.PickerRenderer и базовый Xamarin.Forms.Platform.Android, у основного есть эта проблема, что вам действительно нужно сделать, это что-то вроде:
namespace SolarmonAndroidApp.Droid
{
[assembly: ExportRenderer(typeof(CustomAndroidPicker), typeof(CustomPickerAndroid))]
public class CustomPickerAndroid : Xamarin.Forms.Platform.Android.AppCompat.PickerRenderer
{
public CustomPickerAndroid(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Picker> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.Background = Android.App.Application.Context.GetDrawable(Resource.Drawable.CustomAndroidEntryDraw);
Control.Gravity = GravityFlags.CenterHorizontal;
Control.SetPadding(5, 10, 5, 10);
}
}
}
Конечно без проблем
Просто интересно, знаете ли вы, почему это происходит с тем, который я использовал раньше? Мне он кажется немного сломанным!
На самом деле это последняя версия средства выбора, и, следовательно, она будет правильно работать в последних версиях Android (в большинстве случаев). Теперь версия AppCompat поддерживается так, чтобы она была совместима даже с более низкими версиями Android. , и, следовательно, обычно лучше поддерживается по той же причине, надеюсь, я понимаю
Это полностью работает! И даже выглядит лучше (имхо) как Wheel Picker :) Большое спасибо, ты мой MVP ;)