2016-06-13 3 views
5

Я работаю над проектом Xamarin.forms, но мне нужно использовать Android.Widget.AutoCompleteTextView, как я могу применить это? Когда я пытаюсь добавить AutoCompleteTextView UserNameAutoComplete; к ContentPage я получаю следующее сообщение об ошибке:Как использовать Android AutoCompleteTextView на Xamarin.Forms

Content = new StackLayout 
{     
    VerticalOptions = LayoutOptions.Center, 
    Padding = new Thickness(25), 
    Children = 
    { 
     UserNameAutoComplete, 
     passwordEditor, 
    } 
}; 

cannot convert from 'Android.Widget.AutoCompleteTextView' to 'Xamarin.Forms.View'

ответ

4

Android.Widget.AutoCompleteTextView является View от Android.


Раствор для PCL:

Вы не можете использовать платформу конкретной View's на Xamarin форм (PCL) ContentPage.

Чтобы использовать конкретную платформу View, вы должны использовать custom render. Существует blog post от @JamesMontemagno, который показывает, как делать то, что вам нужно.

Этот код draft пример используйте его как таковой.

1 - Создайте свой собственный контроль пользовательских Xamarin.Forms, которые будут отображенным в Android как AutoCompleteTextView:

public class AutoCompleteView : View 
{ 
    // Place need properties here.  
} 

2 - В Android проекта добавить визуализатор для AutoCompleteView:

[assembly: ExportRenderer(typeof(AutoCompleteView), typeof(AutoCompleteViewRenderer))] 
namespace App.Droid 
{ 
    public class AutoCompleteViewRenderer : ViewRenderer<AutoCompleteView, AutoCompleteTextView> 
    {  
     // Initialize the AutoCompleteTextView 
     protected override void OnElementChanged (ElementChangedEventArgs<AutoComplete> e) 
     { 
      base.OnElementChanged (e); 

      if (e.OldElement != null || this.Element == null) 
       return; 

      var autoComplete = new AutoCompleteTextView(Forms.Context); 
      SetNativeControl (autoComplete); 
     } 

     // Use the control here. 
     protected override void OnElementPropertyChanged (object sender, PropertyChangedEventArgs e) { 
      base.OnElementPropertyChanged (sender, e); 

      if (this.Element == null || this.Control == null) 
       return; 

      // variable this.Control is the AutoCompleteTextView, so you an manipulate it. 
     } 
    } 
} 

Решение для общего проекта:

При использовании Shared проекта есть возможность использовать Native Embedding, как:

... 
    var textView = new TextView (Forms.Context) { Text = originalText }; 
    stackLayout.Children.Add (textView); 
    contentView.Content = textView.ToView(); 
    ... 
+0

могли бы вы дать шаг, чтобы сделать это или добавить код ..thanks –

+0

благодаря jzeferion ..если вам будут familare с пользовательскими рендеринг, не могли бы вы добавить код для ответа, который содержит шаги. –

+0

Я добавил простой пример, чтобы объяснить, как работает рендеринг. Для более подробной информации, пожалуйста, прочитайте полный пост в блоге. – jzeferino