Xamarin表单 - 将Android AutoCompleteTextView添加为本机可绑定视图

时间:2016-12-21 22:59:10

标签: c# android xamarin.forms

因此,通过在Xamarin Forms中选择本机可绑定视图,我想看看是否可以通过添加到我的一个xamarin表单页面来使Android AutoCompleteTextView正常工作。控件确实在android中的页面上呈现,当我键入下拉列表时显示,但问题是建议下拉列表中的文本是白色的,因此不容易看到。我的问题是

  1. 我是否应该放弃此方法并尝试使用自定义渲染器或为此页面实现原生视图?
  2. 如果我选择的路径没问题,我该如何调整控件以另一种颜色显示文字?
  3. 以下是参考代码

    视图

    <?xml version="1.0" encoding="utf-8" ?>
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 xmlns:androidWidget="clr-namespace:Android.Widget;assembly=Mono.Android;targetPlatform=Android"
                 xmlns:formsandroid="clr-namespace:Xamarin.Forms;assembly=Xamarin.Forms.Platform.Android;targetPlatform=Android"
                 x:Class="AcoadApp.Views.AddMatchPage"
                 Title="New Match">
      <StackLayout>
        <androidWidget:AutoCompleteTextView Adapter="{Binding OppAdapter}"  x:Arguments="{x:Static formsandroid:Forms.Context}" />
      </StackLayout>
    </ContentPage>
    

    ViewModel

    public class AddMatchViewModel : BaseViewModel
        {
            ArrayAdapter<Java.Lang.String> _oppAdapter;
            public ArrayAdapter<Java.Lang.String> OppAdapter
            {
                get { return _oppAdapter; }
                set { _oppAdapter = value;  OnPropertyChanged(); }
            }
    
            public AddMatchViewModel(INavService navService)
                :base(navService)
            {
                OppAdapter = new ArrayAdapter<Java.Lang.String>(Android.App.Application.Context, Android.Resource.Layout.SimpleDropDownItem1Line);
            }
    
            public override async Task Init()
            {
                LoadData();
            }
    
            void LoadData()
            {
                OppAdapter.Add(new Java.Lang.String("Seaside"));
                OppAdapter.Add(new Java.Lang.String("Palma"));
                OppAdapter.Add(new Java.Lang.String("Aptos"));
                OppAdapter.Add(new Java.Lang.String("Harbor"));
                OppAdapter.Add(new Java.Lang.String("Salinas"));
                OppAdapter.Add(new Java.Lang.String("Anzar"));
            }
        }
    

    以下是结果的截图(ArrayAdapter的建议是......如果你看得足够近=])
    enter image description here

    任何人可能提出的任何建议或指示都将不胜感激。

    谢谢,

    埃德

    - 编辑 这是请求的BaseViewModel类

    public abstract class BaseViewModel : INotifyPropertyChanged
        {
            protected INavService NavService { get; private set; }
    
            protected BaseViewModel(INavService navService)
            {
                NavService = navService;
            }
    
            public abstract Task Init();
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
            {
                var handler = PropertyChanged;
                if (handler != null)
                    handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    

2 个答案:

答案 0 :(得分:0)

使用XLabs AutoCompleteView或使用XLabs AutoCompleteView Droid代码进行自定义

https://github.com/XLabs/Xamarin-Forms-Labs/wiki/AutoComplete

答案 1 :(得分:0)

我决定使用Syncfusion Xamarin Forms包。他们有一个跨平台的AutoComplete控件似乎运行良好。如果有人有兴趣https://www.syncfusion.com/products/xamarin

,这是链接