Xamarin.Forms: Android <Entry> 和依赖服务?
Xamarin.Forms: Android <Entry> and dependency service?
我目前正在学习 C# 和 Xamarin.Forms,所以请把我当作一个完全的初学者。
我的 XML 在 Xamarin.Forms 中有一个条目:
<Entry x:Name="temperature" Placeholder="Temperatur" Keyboard="Numeric" Margin="20,0"/>
在我的 CS 中:
double temp = double.Parse(temperature.Text);
一切正常。但是我需要为 Android 使用不同类型的条目。因为 Xamarin.Forms 对于三星手机,条目不能很好地处理小数点分隔符。
在 Android 我想像这样使用 NuGet "NumericEditText-Xamarin.Android":
<br.com.akamud.NumericEditText
android:id="@+id/txtNumeric"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number|numberDecimal" />
它应该处理我的条目输入,然后当然用 Xamarin.Forms 的共享代码处理之后的条目。依赖服务是解决这个问题的最佳方式吗?
有人会如此友善地帮助我朝着正确的方向前进吗?
依赖服务用于在特定项目上调用原生 api,如果问题与 UI 相关,自定义渲染器是更好的选择。
您需要为自定义视图创建自定义渲染器,并在自定义渲染器中用 NumericEditText 替换视图。
创建自定义视图
public class EntryView : View
{
}
页面中自定义视图的使用
xmlns:local ="clr-namespace:App2"
<local:EntryView/>
自定义渲染器
[assembly: ExportRenderer(typeof(EntryView), typeof(MyRenderer))]
namespace App2.Droid
{
public class MyRenderer : Xamarin.Forms.Platform.Android.ViewRenderer<EntryView, NumericEditText>
{
Context _context;
NumericEditText editView;
public MyRenderer(Context context) : base(context)
{
_context = context;
}
protected override void OnElementChanged(ElementChangedEventArgs<EntryView> e)
{
base.OnElementChanged(e);
if(e.NewElement != null)
{
if (Control == null)
{
editView = new NumericEditText(Context);
editView.InputType = InputTypes.NumberFlagDecimal|InputTypes.ClassNumber;
SetNativeControl(editView);
}
}
}
}
}
参考https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/view。
我目前正在学习 C# 和 Xamarin.Forms,所以请把我当作一个完全的初学者。
我的 XML 在 Xamarin.Forms 中有一个条目:
<Entry x:Name="temperature" Placeholder="Temperatur" Keyboard="Numeric" Margin="20,0"/>
在我的 CS 中:
double temp = double.Parse(temperature.Text);
一切正常。但是我需要为 Android 使用不同类型的条目。因为 Xamarin.Forms 对于三星手机,条目不能很好地处理小数点分隔符。
在 Android 我想像这样使用 NuGet "NumericEditText-Xamarin.Android":
<br.com.akamud.NumericEditText
android:id="@+id/txtNumeric"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number|numberDecimal" />
它应该处理我的条目输入,然后当然用 Xamarin.Forms 的共享代码处理之后的条目。依赖服务是解决这个问题的最佳方式吗?
有人会如此友善地帮助我朝着正确的方向前进吗?
依赖服务用于在特定项目上调用原生 api,如果问题与 UI 相关,自定义渲染器是更好的选择。
您需要为自定义视图创建自定义渲染器,并在自定义渲染器中用 NumericEditText 替换视图。
创建自定义视图
public class EntryView : View
{
}
页面中自定义视图的使用
xmlns:local ="clr-namespace:App2"
<local:EntryView/>
自定义渲染器
[assembly: ExportRenderer(typeof(EntryView), typeof(MyRenderer))]
namespace App2.Droid
{
public class MyRenderer : Xamarin.Forms.Platform.Android.ViewRenderer<EntryView, NumericEditText>
{
Context _context;
NumericEditText editView;
public MyRenderer(Context context) : base(context)
{
_context = context;
}
protected override void OnElementChanged(ElementChangedEventArgs<EntryView> e)
{
base.OnElementChanged(e);
if(e.NewElement != null)
{
if (Control == null)
{
editView = new NumericEditText(Context);
editView.InputType = InputTypes.NumberFlagDecimal|InputTypes.ClassNumber;
SetNativeControl(editView);
}
}
}
}
}
参考https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/view。