【问题标题】:How can I make my picker options render as a box instead of a spinner?如何使我的选择器选项呈现为框而不是微调器?
【发布时间】:2018-06-23 08:21:58
【问题描述】:

在 Android 上,我的选择器是这样渲染的

我希望它像这样呈现

这不是我很难使用的颜色,而是它被渲染为一个微调器,我不希望这样。

我通过数据绑定到 ItemsSource 属性来填充选择器,如此处所述。

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/picker/populating-itemssource

这是我的选择器

<Picker ItemsSource="{Binding AmountFrequencyStrategies}" />

这是我的视图模型

    private List<string> amountFrequencyStrategies;

    public PageViewModel()
    {
        this.amountFrequencyStrategies = new List<string>{ "one", "two", "three"};
    }

    public List<string> AmountFrequencyStrategies => this.amountFrequencyStrategies;

我的 xamarin.forms 版本是 3.0.0.482510

我的 android 清单文件有以下行

<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="27" />

【问题讨论】:

标签: xamarin.forms


【解决方案1】:

您必须为选择器编写自己的渲染器,或者根本不使用选择器并滚动您自己的跨平台 UI 来选择项目。如您所见,内置的 Xamarin Forms 选择器会呈现到 Android 上的 Spinner。

自定义渲染器指南:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/

您可能需要查看 Android 上 Xamarin.Forms Picker Renderer 的源代码,以了解如何制作自己的而不使用 Spinner: 不使用 AppCompat:https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Platform.Android/Renderers/PickerRenderer.cs 使用 AppCompat: https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Platform.Android/AppCompat/PickerRenderer.cs

实际上看起来他们没有使用 Spinner。在非 AppCompat 渲染器上,它看起来就像使用了一个 Android NumberPicker: https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Platform.Android/Renderers/PickerRenderer.cs#L110

在 AppCompat 版本的 PickerRenderer 上,它看起来像使用了一个警告对话框: https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Platform.Android/AppCompat/PickerRenderer.cs#L109

【讨论】:

  • 谢谢你——你刚刚救了我的培根。我试图弄清楚为什么我的 PickerRenderer 本身的渲染与普通的 Picker 不同——结果我需要从 Xamarin.Forms.Platform.Android.AppCompat.PickerRenderer 而不是 Xamarin.Forms.Platform.Android.PickerRenderer 派生这太疯狂了!每个 OP - 您可能需要考虑做同样的事情。
  • 非常感谢,我也想知道,在我迁移 MainActivity 以派生 FormsAppCompatActivity 之后,我很高兴 Picker 看起来更现代,就像一个警报对话框。然后我写了一个自定义渲染器和繁荣,它回到了旧的蹩脚风格。现在,当我从 AppCompat.PickerRenderer 派生时,一切都回到了 ace。
【解决方案2】:

你可以参考这个:Bindable Picker Control for Xamarin.Forms 希望能解决你的问题

【讨论】:

  • 感谢您的反馈。我已经更新了我的问题,以表明我正在做的事情就像你引用的文章一样。不幸的是,选择器仍然是微调器类型。
  • 您的项目中的 Xamarin.Forms 版本是什么?
  • 我已更新我的问题以包含 Xamarin.Forms 的版本
  • 我已经尝试了 Xamarin.Forms 版本 2.3.4.270 的示例项目,它的工作正常,如果它可能降级到这个版本并尝试!
  • 我已将项目降级,但仍能看到微调器类型。我知道我在这里遗漏了一些东西。感谢您对此的帮助。我将继续尝试追踪此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多