summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Android/Cells/EntryCellRenderer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Platform.Android/Cells/EntryCellRenderer.cs')
-rw-r--r--Xamarin.Forms.Platform.Android/Cells/EntryCellRenderer.cs119
1 files changed, 119 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.Android/Cells/EntryCellRenderer.cs b/Xamarin.Forms.Platform.Android/Cells/EntryCellRenderer.cs
new file mode 100644
index 00000000..00330928
--- /dev/null
+++ b/Xamarin.Forms.Platform.Android/Cells/EntryCellRenderer.cs
@@ -0,0 +1,119 @@
+using System.ComponentModel;
+using Android.Content;
+using Android.Views;
+
+namespace Xamarin.Forms.Platform.Android
+{
+ public class EntryCellRenderer : CellRenderer
+ {
+ EntryCellView _view;
+
+ protected override global::Android.Views.View GetCellCore(Cell item, global::Android.Views.View convertView, ViewGroup parent, Context context)
+ {
+ if ((_view = convertView as EntryCellView) == null)
+ _view = new EntryCellView(context, item);
+ else
+ {
+ _view.TextChanged = null;
+ _view.FocusChanged = null;
+ _view.EditingCompleted = null;
+ }
+
+ UpdateLabel();
+ UpdateLabelColor();
+ UpdatePlaceholder();
+ UpdateKeyboard();
+ UpdateHorizontalTextAlignment();
+ UpdateText();
+ UpdateIsEnabled();
+ UpdateHeight();
+
+ _view.TextChanged = OnTextChanged;
+ _view.EditingCompleted = OnEditingCompleted;
+
+ return _view;
+ }
+
+ protected override void OnCellPropertyChanged(object sender, PropertyChangedEventArgs e)
+ {
+ base.OnCellPropertyChanged(sender, e);
+
+ if (e.PropertyName == EntryCell.LabelProperty.PropertyName)
+ UpdateLabel();
+ else if (e.PropertyName == EntryCell.TextProperty.PropertyName)
+ UpdateText();
+ else if (e.PropertyName == EntryCell.PlaceholderProperty.PropertyName)
+ UpdatePlaceholder();
+ else if (e.PropertyName == EntryCell.KeyboardProperty.PropertyName)
+ UpdateKeyboard();
+ else if (e.PropertyName == EntryCell.LabelColorProperty.PropertyName)
+ UpdateLabelColor();
+ else if (e.PropertyName == EntryCell.HorizontalTextAlignmentProperty.PropertyName)
+ UpdateHorizontalTextAlignment();
+ else if (e.PropertyName == Cell.IsEnabledProperty.PropertyName)
+ UpdateIsEnabled();
+ else if (e.PropertyName == "RenderHeight")
+ UpdateHeight();
+ }
+
+ void OnEditingCompleted()
+ {
+ var entryCell = (EntryCell)Cell;
+ entryCell.SendCompleted();
+ }
+
+ void OnTextChanged(string text)
+ {
+ var entryCell = (EntryCell)Cell;
+ entryCell.Text = text;
+ }
+
+ void UpdateHeight()
+ {
+ _view.SetRenderHeight(Cell.RenderHeight);
+ }
+
+ void UpdateHorizontalTextAlignment()
+ {
+ var entryCell = (EntryCell)Cell;
+ _view.EditText.Gravity = entryCell.HorizontalTextAlignment.ToHorizontalGravityFlags();
+ }
+
+ void UpdateIsEnabled()
+ {
+ var entryCell = (EntryCell)Cell;
+ _view.EditText.Enabled = entryCell.IsEnabled;
+ }
+
+ void UpdateKeyboard()
+ {
+ var entryCell = (EntryCell)Cell;
+ _view.EditText.InputType = entryCell.Keyboard.ToInputType();
+ }
+
+ void UpdateLabel()
+ {
+ _view.LabelText = ((EntryCell)Cell).Label;
+ }
+
+ void UpdateLabelColor()
+ {
+ _view.SetLabelTextColor(((EntryCell)Cell).LabelColor, global::Android.Resource.Color.PrimaryTextDark);
+ }
+
+ void UpdatePlaceholder()
+ {
+ var entryCell = (EntryCell)Cell;
+ _view.EditText.Hint = entryCell.Placeholder;
+ }
+
+ void UpdateText()
+ {
+ var entryCell = (EntryCell)Cell;
+ if (_view.EditText.Text == entryCell.Text)
+ return;
+
+ _view.EditText.Text = entryCell.Text;
+ }
+ }
+} \ No newline at end of file