Xamarin.Forms: Android <Entry>和依赖服务?

问题描述 投票:3回答:1

我现在正在学习C#和Xamarin.Forms,所以请把我当成一个完全的初学者。

我在Xamarin.Forms的XML中有一个条目。

<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的共享代码来处理之后的输入。依赖服务是解决这个问题的最好方法吗?谁能好心的帮我解答一下。

c# android xamarin.forms decimal numeric
1个回答
1
投票

依赖服务用于调用特定项目上的原生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.comen-usxamarinxamarin-formsapp-fundamentalscustom-rendererview。.

© www.soinside.com 2019 - 2024. All rights reserved.