2017-07-06 21 views
0

私は現在、最終的に私を窮地に追いやるかなり簡単な問題に直面しています。私はXamarin Formsを使用するアプリケーションを構築しており、ユーザーが箇条書きからアスタリスクにパスワードを入力すると、マスキング文字を変更したいと考えています。私はおそらくこの1のためのAndroidプロジェクトでのカスタムレンダラを作成する必要があることを知っているXamarinフォームのパスワードマスキング文字を変更する方法 - エントリ

<Entry x:Name="Entry_Password" Placeholder="Password" IsPassword="True" /> 

:私は(プロVS2017で)私のコンテンツページでポータブルlibにプロジェクト内のエントリコントロールを使用していたパスワードを入力するための

この特定の目的のためにそれをどうやって行うのか本当に感謝しています。

答えて

1

コンバータの答えが働くと確信していますが、個人的な好みとして、私はそれを好みません。これは私へのレンダラの仕事のように見えます。

とここで私はそれを行うだろうかです(唯一のAndroidの例で私は、IOSを持っていけないので、そこにそれを実装するために、その非常に単純な)

使用Xamarinが

 <controls:PasswordBox Placeholder="Password"/> 

レンダラ(アンドロイドを形成GitHub

+0

ありがとうございました!どちらのバリエーションもうまくいきましたが、レンダラーを使用する方がこの場合より適切なアプローチであることに同意します。 – Dzhara

1

これを行う簡単な方法は、コンバータを使用してアスタリスク内のすべての文字を交換することです。値を要求するときよりも平易です。

これはあなたの問題であなたを助けることができる興味深い記事:https://forums.xamarin.com/discussion/52354/is-there-a-way-to-partially-mask-an-entry-field-in-xamarin

それが一方向を使用し、双方向ではないために輸入されます!

幸運

+0

感謝ヨーヨーにおいて)

[assembly: ExportRenderer(typeof(PasswordBox), typeof(PasswordBoxRenderer))] namespace PasswordAsterisk.Droid.Renderers { public class PasswordBoxRenderer : EntryRenderer { protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) { base.OnElementChanged(e); if (Control != null) { Control.InputType = Android.Text.InputTypes.TextVariationPassword | Android.Text.InputTypes.ClassText; Control.TransformationMethod = new HiddenPasswordTransformationMethod(); } } } internal class HiddenPasswordTransformationMethod : Android.Text.Method.PasswordTransformationMethod { public override Java.Lang.ICharSequence GetTransformationFormatted(Java.Lang.ICharSequence source, Android.Views.View view) { return new PasswordCharSequence(source); } } internal class PasswordCharSequence : Java.Lang.Object, Java.Lang.ICharSequence { private Java.Lang.ICharSequence _source; public PasswordCharSequence(Java.Lang.ICharSequence source) { _source = source; } public char CharAt(int index) { return '*'; } public int Length() { return _source.Length(); } public Java.Lang.ICharSequence SubSequenceFormatted(int start, int end) { return _source.SubSequenceFormatted(start, end); } public IEnumerator<char> GetEnumerator() { return _source.GetEnumerator(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return _source.GetEnumerator(); } } } 

完全なソースコードの例うーん、うまくいきましたが、私はレンダラーで2番目の答えに行くことにしました。 – Dzhara

関連する問題