Я занимаюсь разработкой приложения Xamarin для Android и iOS.эта проблема специально для Android.Я пытаюсь отобразить всплывающее окно выбора с элементами, выровненными по левому краю, с длинным текстом, который можно прокручивать по горизонтали (чтобы можно было просмотреть весь текст), и имеет границы сверху и снизу текущего выбранного элемента колеса.Я не могу заставить текстовые элементы выбора появляться слева с небольшим отступом и все еще прокручивать по горизонтали.Он может показаться многострочным, но до тех пор, пока у него все еще есть верхняя и нижняя границы для идентификации выбранного элемента.
Я создал пользовательский рендер для обеих платформ, делайте это.Я попытался установить следующее в моем коде:
picker.LayoutMode = ViewLayoutMode.ClipBounds;
picker.SetClipToPadding(false);
picker.SetHorizontalGravity(GravityFlags.Start);
picker.TextAlignment = TextAlignment.TextStart;
XAML:
<controls:ImagePicker HeightRequest="40" FontSize="Small" HorizontalOptions="FillAndExpand" x:Name="pkrSystem">
<Picker.Effects>
<effects:BackgroundEffect />
</Picker.Effects>
</controls:ImagePicker>
пользовательский рендерер в проекте Android:
[assembly: ExportRenderer(typeof(ImagePicker), typeof(ImagePickerRenderer))]
namespace ClientApp.Droid.Renderers
{
public class ImagePickerRenderer : PickerRenderer
{
private IElementController ElementController => Element as IElementController;
private AlertDialog _dialog;
public ImagePickerRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.Click += Control_Click;
}
}
protected override void Dispose(bool disposing)
{
Control.Click -= Control_Click;
base.Dispose(disposing);
}
private void Control_Click(object sender, EventArgs e)
{
Picker model = Element;
var picker = new NumberPicker(Context);
if (model.Items != null && model.Items.Any())
{
picker.MaxValue = model.Items.Count - 1;
picker.MinValue = 0;
picker.SetDisplayedValues(model.Items.ToArray());
picker.WrapSelectorWheel = false;
picker.DescendantFocusability = DescendantFocusability.BlockDescendants;
picker.Value = model.SelectedIndex;
picker.SetFitsSystemWindows(true);
//picker.LayoutMode = ViewLayoutMode.ClipBounds;
//picker.SetClipToPadding(false);
//picker.SetHorizontalGravity(GravityFlags.ClipHorizontal);
//picker.TextAlignment = TextAlignment.TextStart;
}
var layout = new LinearLayout(Context) { Orientation = Orientation.Vertical };
layout.AddView(picker);
ElementController.SetValueFromRenderer(VisualElement.IsFocusedProperty, true);
var builder = new AlertDialog.Builder(Context);
builder.SetView(layout);
builder.SetTitle(model.Title ?? "");
builder.SetNegativeButton("Cancel", (s, a) =>
{
ElementController.SetValueFromRenderer(VisualElement.IsFocusedProperty, false);
Control?.ClearFocus();
_dialog = null;
});
builder.SetPositiveButton("Ok", (s, a) =>
{
ElementController.SetValueFromRenderer(Picker.SelectedIndexProperty, picker.Value);
if (Element != null)
{
if (model.Items.Count > 0 && Element.SelectedIndex >= 0)
Control.Text = model.Items[Element.SelectedIndex];
ElementController.SetValueFromRenderer(VisualElement.IsFocusedProperty, false);
Control?.ClearFocus();
}
_dialog = null;
});
_dialog = builder.Create();
_dialog.DismissEvent += (ssender, args) =>
{
ElementController?.SetValueFromRenderer(VisualElement.IsFocusedProperty, false);
};
_dialog.Show();
}
}
}
Ожидаемый результат: сборщиктекст элемента, отображаемый слева с небольшим отступом и полностью прокручиваемый по горизонтали, или текст элемента выбора является многострочным, поэтому может просматривать полный текст и по-прежнему распознаваться по верхней и нижней границам. ожидаемый снимок экрана: https://imgur.com/a/VrangdD
Фактический результат: текст элемента средства выбора появляется в середине каждого всплывающего элемента средства выбора, а затем попробуйте прокрутить влево, если он обрезал некоторый текст, поэтому невозможно полностью прокрутить влево, чтобы просмотреть полный тексттекст, в настоящее время отображается как однострочный текст.Верхняя и нижняя границы отображаются правильно. фактический скриншот: https://imgur.com/a/XGCZQeZ