【发布时间】:2018-03-28 16:49:55
【问题描述】:
在我的 xamarin.android 项目中,我有一个使用了 edittext 的屏幕,它的类型是 numberdecimal。在这里,我在 keyPress 上获取 textchanged 事件并附加 使用下面的方法向左编号。 这是代码。
namespace MobileApplication.Droid
{
[Activity(Label = "TransferScreen2Activity", ScreenOrientation = ScreenOrientation.Portrait, Theme = "@style/MyTheme")]
public class TransferScreenActivity : BaseActivity, IOnTouchListener
{
Button _nextButton;
EditText _amountEditText;
bool _triggerTextChangedforAmountEntry = true;
protected override async void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.transferscreen2);
_nextButton = FindViewById<Button>(Resource.Id.btnNext);
_amountEditText = FindViewById<EditText>(Resource.Id.etTransactionAmount);
_amountEditText.SetSelection(_amountEditText.Text.Length);
_amountEditText.TextChanged += _amountEditText_TextChanged;
_amountEditText.SetOnTouchListener(this);
}
private void _amountEditText_TextChanged(object sender, Android.Text.TextChangedEventArgs e)
{
if (_triggerTextChangedforAmountEntry)
{
_triggerTextChangedforAmountEntry = false;
string pressedKey = "";
if (e.Text.Count() < (e.Start + 1))
{
pressedKey = "";
}
else
{
pressedKey = e.Text.ToString()[e.Start].ToString();
}
if (!string.IsNullOrEmpty(pressedKey))
{
CalculateAmountAfterKeyPress(pressedKey, e.Start);
}
else
{
CalculateAmountAfterKeyPress("←", 0);
}
_amountEditText.SetSelection(_amountEditText.Text.Length);
_triggerTextChangedforAmountEntry = true;
}
}
private void CalculateAmountAfterKeyPress(string key, int cursorPosition) //appending method.
{
string currentText = "";
if (key == "←")
{
currentText = _amountEditText.Text.Trim().Replace("$", "");
}
else
{
currentText = _amountEditText.Text.Trim().Remove(cursorPosition, 1).Replace("$", "");
}
string result = "0";
bool isProperValue = false;
switch (key)
{
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
isProperValue = Common.ShiftLeftandAppendChar(currentText, key, out result);
break;
case "←":
isProperValue = Common.ShiftRight(currentText, out result);
break;
case "C":
isProperValue = true;
result = "0.00";
break;
default:
isProperValue = true;
break;
}
_amountEditText.Text = Resources.GetString(Resource.String.CurrencySymbol) + result;
if (!isProperValue)
{
Common.ShakeAnimation(this, _amountEditText);
}
}
public bool OnTouch(View v, MotionEvent e)
{
_amountEditText.OnTouchEvent(e);
_amountEditText.SetSelection(_amountEditText.Text.Length);
return true;
}
}
我的问题是..我想在 Xamarin.ios 中复制整个内容..我对这个 xamarin.ios 很陌生。谁能指导我 实现这一目标。请让我知道是否有其他解决方法可以做到这一点。
这里是 xamarin.ios 代码(不完整)
namespace MobileApplication.iOS
{
public partial class FundTransferScreenController : BaseViewController
{
public FundTransferScreenController(IntPtr handle) : base(handle)
{
}
public override async void ViewDidLoad()
{
base.ViewDidLoad();
amountValue.ValueChanged += HandleTextChanged;
}
}
private void HandleTextChanged(object sender, EventArgs e)
{
//how to do it like android code..?
}
public override void TouchesBegan(NSSet touches, UIEvent evt)
{
base.TouchesBegan(touches, evt);
amountValue.ResignFirstResponder();
}
}
【问题讨论】:
标签: c# android xamarin xamarin.ios xamarin.android