2017-08-15 95 views
-1

我正在嘗試構建一個XF應用程序,該應用程序允許用戶輸入文本並標記地點列表(類似於如何在WhatsApp,Outlook應用程序或甚至Twitter的hashtag)。我仍然從XF開始。任何人都可以指出我正確的方向嗎?我發現的最多的是TagEntryView插件,這非常棒,但我需要能夠在線標記「位置」。Xamarin表單:支持內聯標記的自定義條目

例如: 明天我想看@Paris

在先進的感謝:)

回答

1

我想提供有關我們與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(); 
       }; 
      } 
     } 
    } 
} 

渲染圖像:

enter image description here

這認購的想法TextChanged本機控制事件,如果你是對於在UWP平臺上的實施感興趣,它也是類似的,你可以試試看。對於iOS平臺?對不起,我也不太熟悉...

+0

謝謝!這工作完美,我會用這個前進。 – BeginnerCoder

+0

不錯 - Android自定義渲染器的好例子 –