私が直接、第三部構成のlibを使用していない、XFで私たちの自己することにより、このようなコントロールを作成する方法についていくつかのアイデアを提供したいです。 (ちなみに、私はこの機能をサポートするサードパーティ製のlibを知りません)
私たちはいつも言っています:Custom Renderersを実装して、PCLのターゲットプラットフォームのネイティブコントロールを使用します。
ご要望に応じて、Entry
をカスタマイズすることができます。
public class TagEntry : Entry
{
}
その後、Androidプラットフォーム用:
[assembly: ExportRenderer(typeof(TagEntry), typeof(TagEntryRenderer))]
namespace YourNameSpace.Droid
{
public class TagEntryRenderer : EntryRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
Control.AfterTextChanged += Control_AfterTextChanged;
if (e.OldElement != null)
Control.AfterTextChanged -= Control_AfterTextChanged;
}
private void Control_AfterTextChanged(object sender, AfterTextChangedEventArgs e)
{
//detect if '@' is entered.
if (e.Editable.LastOrDefault() == '@')
{
//show a popup list for selection.
//I here use a simple menu for testing, you should be able to change it to your list popup.
PopupMenu popup = new PopupMenu(Xamarin.Forms.Forms.Context, Control);
popup.MenuInflater.Inflate(Resource.Menu.testmenu, popup.Menu);
popup.Show();
popup.MenuItemClick += (ss, ee) =>
{
var item = ee.Item.TitleFormatted;
e.Editable.Delete(e.Editable.Length() - 1, e.Editable.Length());
SpannableString spannable = new SpannableString("@" + item);
spannable.SetSpan(new ForegroundColorSpan(Android.Graphics.Color.Blue), 0, item.Length() + 1, SpanTypes.ExclusiveExclusive);
e.Editable.Append(spannable);
popup.Dismiss();
};
}
}
}
}
レンダリング画像:PCLでは、このような私たちのエントリを作成
は
これは、サブスクライブする考えですTextChanged
ネイティブコントロールのイベントです。 UWPプラットフォーム上での実装に興味がある、それは似ている、あなたは試してみることができます。 iOSプラットフォームの場合申し訳ありませんが、私はあまりにも身近ではない...
ありがとう!これは完全に機能し、今後これを使用します。 – BeginnerCoder
ニース - Androidカスタムレンダラーの良い例 –