{
}
+ protected override global::Android.Widget.ListView CreateNativeControl()
+ {
+ return new global::Android.Widget.ListView(Forms.Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<NativeListView> e)
{
base.OnElementChanged(e);
if (Control == null)
{
- SetNativeControl(new global::Android.Widget.ListView(Forms.Context));
+ SetNativeControl(CreateNativeControl());
}
if (e.OldElement != null)
{
}
+ protected override global::Android.Widget.ListView CreateNativeControl()
+ {
+ return new global::Android.Widget.ListView(Forms.Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<NativeListView2> e)
{
base.OnElementChanged(e);
if (Control == null)
{
- SetNativeControl(new global::Android.Widget.ListView(Forms.Context));
+ SetNativeControl(CreateNativeControl());
}
if (e.OldElement != null)
return view;
}
}
- public class CustomContentRenderer : ViewRenderer
+ public abstract class CustomContentRenderer : ViewRenderer
{
}
public class CustomButtonRenderer : ButtonRenderer
{
+ protected override AButton CreateNativeControl()
+ {
+ return new CustomNativeButton(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
if (Control == null)
{
- CustomNativeButton b = new CustomNativeButton(Context);
+ CustomNativeButton b = (CustomNativeButton)CreateNativeControl();
SetNativeControl(b);
}
namespace Xamarin.Forms.Maps.Android
{
- public class MapRenderer : ViewRenderer,
+ public class MapRenderer : ViewRenderer<Map,MapView>,
GoogleMap.IOnCameraChangeListener
{
public MapRenderer ()
return new SizeRequest (new Size (Context.ToPixels (40), Context.ToPixels (40)));
}
- protected override void OnElementChanged (ElementChangedEventArgs<View> e)
+ protected override MapView CreateNativeControl()
+ {
+ return new MapView(Context);
+ }
+
+ protected override void OnElementChanged (ElementChangedEventArgs<Map> e)
{
base.OnElementChanged (e);
var oldMapView = (MapView)Control;
- var mapView = new MapView (Context);
+ var mapView = CreateNativeControl();
mapView.OnCreate (s_bundle);
mapView.OnResume ();
SetNativeControl (mapView);
if (e.OldElement != null) {
- var oldMapModel = (Map) e.OldElement;
+ var oldMapModel = e.OldElement;
((ObservableCollection<Pin>)oldMapModel.Pins).CollectionChanged -= OnCollectionChanged;
MessagingCenter.Unsubscribe<Map, MapSpan> (this, MoveMessageName);
{
public abstract class ViewRenderer<TView, TControl> : Android.ViewRenderer<TView, TControl> where TView : View where TControl : global::Android.Views.View
{
- protected abstract TControl CreateNativeControl();
}
}
\ No newline at end of file
return result ?? base.GetDesiredSize(widthConstraint, heightConstraint);
}
+ // not called by the view wrapper renderer
+ protected override global::Android.Views.View CreateNativeControl()
+ {
+ return new global::Android.Views.View(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<NativeViewWrapper> e)
{
base.OnElementChanged(e);
AutoPackage = false;
}
+ protected override AProgressBar CreateNativeControl()
+ {
+ return new AProgressBar(Context) { Indeterminate = true };
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<ActivityIndicator> e)
{
base.OnElementChanged(e);
AProgressBar progressBar = Control;
if (progressBar == null)
{
- progressBar = new AProgressBar(Context) { Indeterminate = true };
+ progressBar = CreateNativeControl();
SetNativeControl(progressBar);
}
base.Dispose(disposing);
}
+ protected override AButton CreateNativeControl()
+ {
+ return new AButton(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
AButton button = Control;
if (button == null)
{
- button = new AButton(Context);
+ button = CreateNativeControl();
button.SetOnClickListener(ButtonClickListener.Instance.Value);
button.Tag = this;
SetNativeControl(button);
base.Dispose(disposing);
}
+ protected override EditText CreateNativeControl()
+ {
+ return new EditText(Context) { Focusable = false, Clickable = true, Tag = this };
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<DatePicker> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
- var textField = new EditText(Context) { Focusable = false, Clickable = true, Tag = this };
+ var textField = CreateNativeControl();
textField.SetOnClickListener(TextFieldClickHandler.Instance);
SetNativeControl(textField);
((IElementController)Element).SetValueFromRenderer(Editor.TextProperty, s.ToString());
}
+ protected override EditorEditText CreateNativeControl()
+ {
+ return new EditorEditText(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
{
base.OnElementChanged(e);
EditorEditText edit = Control;
if (edit == null)
{
- edit = new EditorEditText(Context);
+ edit = CreateNativeControl();
SetNativeControl(edit);
edit.AddTextChangedListener(this);
((IElementController)Element).SetValueFromRenderer(Entry.TextProperty, s.ToString());
}
+ protected override EntryEditText CreateNativeControl()
+ {
+ return new EntryEditText(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
- _textView = new EntryEditText(Context);
+ _textView = CreateNativeControl();
_textView.ImeOptions = ImeAction.Done;
_textView.AddTextChangedListener(this);
_textView.SetOnEditorActionListener(this);
base.Dispose(disposing);
}
+ protected override AImageView CreateNativeControl()
+ {
+ return new FormsImageView(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<Image> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
- var view = new FormsImageView(Context);
+ var view = CreateNativeControl();
SetNativeControl(view);
}
return result;
}
+ protected override TextView CreateNativeControl()
+ {
+ return new FormsTextView(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
if (_view == null)
{
- _view = new FormsTextView(Context);
+ _view = (FormsTextView)CreateNativeControl();
_labelTextColorDefault = _view.TextColors;
SetNativeControl(_view);
}
_adapter.IsAttachedToWindow = _isAttached;
}
+ protected override AListView CreateNativeControl()
+ {
+ return new AListView(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<ListView> e)
{
base.OnElementChanged(e);
if (nativeListView == null)
{
var ctx = Context;
- nativeListView = new AListView(ctx);
+ nativeListView = CreateNativeControl();
_refresh = new SwipeRefreshLayout(ctx);
_refresh.SetOnRefreshListener(this);
_refresh.AddView(nativeListView, LayoutParams.MatchParent);
get { return Element as NavigationMenu; }
}
+ protected override AView CreateNativeControl()
+ {
+ return new GridView(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<View> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
- var grid = new GridView(Context);
+ var grid = (GridView)CreateNativeControl();
grid.SetVerticalSpacing(20);
SetNativeControl(grid);
base.Dispose(disposing);
}
+ protected override GLSurfaceView CreateNativeControl()
+ {
+ return new GLSurfaceView(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<OpenGLView> e)
{
base.OnElementChanged(e);
GLSurfaceView surfaceView = Control;
if (surfaceView == null)
{
- surfaceView = new GLSurfaceView(Context);
+ surfaceView = CreateNativeControl();
surfaceView.SetEGLContextClientVersion(2);
SetNativeControl(surfaceView);
}
base.Dispose(disposing);
}
+ protected override EditText CreateNativeControl()
+ {
+ return new EditText(Context) { Focusable = false, Clickable = true, Tag = this };
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
if (e.OldElement != null)
((ObservableList<string>)e.NewElement.Items).CollectionChanged += RowsCollectionChanged;
if (Control == null)
{
- var textField = new EditText(Context) { Focusable = false, Clickable = true, Tag = this };
+ var textField = CreateNativeControl();
textField.SetOnClickListener(PickerListener.Instance);
_textColorSwitcher = new TextColorSwitcher(textField.TextColors);
SetNativeControl(textField);
AutoPackage = false;
}
+ protected override AProgressBar CreateNativeControl()
+ {
+ return new AProgressBar(Context, null, global::Android.Resource.Attribute.ProgressBarStyleHorizontal) { Indeterminate = false, Max = 10000 };
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<ProgressBar> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
- var progressBar = new AProgressBar(Context, null, global::Android.Resource.Attribute.ProgressBarStyleHorizontal) { Indeterminate = false, Max = 10000 };
+ var progressBar = CreateNativeControl();
SetNativeControl(progressBar);
}
+using System;
using System.ComponentModel;
using System.Linq;
using Android.Content.Res;
return true;
}
+ protected override SearchView CreateNativeControl()
+ {
+ return new SearchView(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e)
{
base.OnElementChanged(e);
if (searchView == null)
{
- searchView = new SearchView(Context);
+ searchView = CreateNativeControl();
searchView.SetIconifiedByDefault(false);
searchView.Iconified = false;
SetNativeControl(searchView);
{
}
+ protected override SeekBar CreateNativeControl()
+ {
+ return new FormsSeekBar(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<Slider> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
- var seekBar = new FormsSeekBar(Context);
+ var seekBar = CreateNativeControl();
SetNativeControl(seekBar);
seekBar.Max = 1000;
AutoPackage = false;
}
+ protected override LinearLayout CreateNativeControl()
+ {
+ return new LinearLayout(Context) { Orientation = Orientation.Horizontal };
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<Stepper> e)
{
base.OnElementChanged(e);
_upButton.SetOnClickListener(StepperListener.Instance);
_upButton.SetHeight((int)Context.ToPixels(10.0));
- var layout = new LinearLayout(Context) { Orientation = Orientation.Horizontal };
+ var layout = CreateNativeControl();
layout.AddView(_downButton);
layout.AddView(_upButton);
base.Dispose(disposing);
}
+ protected override ASwitch CreateNativeControl()
+ {
+ return new ASwitch(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<Switch> e)
{
base.OnElementChanged(e);
{
if (Control == null)
{
- var aswitch = new ASwitch(Context);
+ var aswitch = CreateNativeControl();
aswitch.SetOnCheckedChangeListener(this);
SetNativeControl(aswitch);
}
return new Size(40, 40);
}
+ protected override AListView CreateNativeControl()
+ {
+ return new AListView(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<TableView> e)
{
base.OnElementChanged(e);
AListView listView = Control;
if (listView == null)
{
- listView = new AListView(Context);
+ listView = CreateNativeControl();
SetNativeControl(listView);
}
_dialog = null;
}
+ protected override EditText CreateNativeControl()
+ {
+ return new EditText(Context) { Focusable = false, Clickable = true, Tag = this };
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<TimePicker> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
- var textField = new EditText(Context) { Focusable = false, Clickable = true, Tag = this };
+ var textField = CreateNativeControl();
textField.SetOnClickListener(TimePickerListener.Instance);
SetNativeControl(textField);
return new Size(Context.ToPixels(40), Context.ToPixels(40));
}
+ protected override AWebView CreateNativeControl()
+ {
+ return new AWebView(Context);
+ }
+
protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
{
base.OnElementChanged(e);
if (Control == null)
{
- var webView = new AWebView(Context);
+ var webView = CreateNativeControl();
#pragma warning disable 618 // This can probably be replaced with LinearLayout(LayoutParams.MatchParent, LayoutParams.MatchParent); just need to test that theory
webView.LayoutParameters = new global::Android.Widget.AbsoluteLayout.LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent, 0, 0);
#pragma warning restore 618
public abstract class ViewRenderer<TView, TNativeView> : VisualElementRenderer<TView>, AView.IOnFocusChangeListener where TView : View where TNativeView : AView
{
+ protected abstract TNativeView CreateNativeControl();
+
ViewGroup _container;
bool _disposed;