-1
我正在嘗試構建一個XF應用程序,該應用程序允許用戶輸入文本並標記地點列表(類似於如何在WhatsApp,Outlook應用程序或甚至Twitter的hashtag)。我仍然從XF開始。任何人都可以指出我正確的方向嗎?我發現的最多的是TagEntryView插件,這非常棒,但我需要能夠在線標記「位置」。Xamarin表單:支持內聯標記的自定義條目
例如: 明天我想看@Paris
。
在先進的感謝:)
我正在嘗試構建一個XF應用程序,該應用程序允許用戶輸入文本並標記地點列表(類似於如何在WhatsApp,Outlook應用程序或甚至Twitter的hashtag)。我仍然從XF開始。任何人都可以指出我正確的方向嗎?我發現的最多的是TagEntryView插件,這非常棒,但我需要能夠在線標記「位置」。Xamarin表單:支持內聯標記的自定義條目
例如: 明天我想看@Paris
。
在先進的感謝:)
我想提供有關我們與XF自我,創造這樣的控制沒有直接使用了第三件庫的一些想法。 (順便說一句,我不知道任何支持此功能的第三方庫。)
正如我們總是說的:實施Custom Renderers以使用PCL的目標平臺的本地控件。
所以在這裏爲您的要求,我們可以嘗試定製Entry
。
在PCL創造我們進入這樣的:
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();
};
}
}
}
}
渲染圖像:
這認購的想法TextChanged
本機控制事件,如果你是對於在UWP平臺上的實施感興趣,它也是類似的,你可以試試看。對於iOS平臺?對不起,我也不太熟悉...
謝謝!這工作完美,我會用這個前進。 – BeginnerCoder
不錯 - Android自定義渲染器的好例子 –