C# 自定义标签中的Xamarin可单击子字符串
我试图使用户可以单击标签中的某个子字符串并运行一个方法,例如,单击hashtag将运行OpenHashtagstring hashtag,单击@taggedUser将运行ViewProfiletaggedUser 我找到了教程,除了我不希望电话号码或URL是可点击的,只有标签和标签用户 这些是它使用的渲染 安卓 IOS 安卓: 而不是使用textView.AutoLinkMask=MatchOptions.All 你可以用 方法定义正则表达式,例如,任何以或@开头的单词都可以使用 但在iOS上,我认为更复杂。 在这里,我看到两种选择: 使用WebView。解析字符串并添加Android: 而不是使用textView.AutoLinkMask=MatchOptions.All 你可以用 方法定义正则表达式,例如,任何以或@开头的单词都可以使用 但在iOS上,我认为更复杂。 在这里,我看到两种选择:C# 自定义标签中的Xamarin可单击子字符串,c#,xamarin,xamarin.forms,xamarin.ios,xamarin.android,C#,Xamarin,Xamarin.forms,Xamarin.ios,Xamarin.android,我试图使用户可以单击标签中的某个子字符串并运行一个方法,例如,单击hashtag将运行OpenHashtagstring hashtag,单击@taggedUser将运行ViewProfiletaggedUser 我找到了教程,除了我不希望电话号码或URL是可点击的,只有标签和标签用户 这些是它使用的渲染 安卓 IOS 安卓: 而不是使用textView.AutoLinkMask=MatchOptions.All 你可以用 方法定义正则表达式,例如,任何以或@开头的单词都可以使用 但在iOS上,
使用WebView。至少就Andriod而言,解析您的字符串并添加您将无法使用这些解决方案。他们启用的andriod功能来自,显然它们不支持散列标签,您必须制作一个非常特定的渲染器,我猜这不会是微不足道的,但可能是可行的,或者找到一个预先制作的解决方案,您可以采用一种更细粒度的方法。最好的方法是在标签上添加一个手势识别器。我不太清楚您为什么选择自定义渲染器,但我看到您用xamarin.forms标记了这个问题。如果您已经用xamarin表单构建了解决方案,那么添加一个执行命令的手势识别器将是微不足道的。@Spokkruger如果我添加一个手势识别器,它将使整个标签仅指向该标签,如果一篇文章中有两个hashtag或两个带标签的用户呢?至少就Andriod而言,您将无法使用这些解决方案。他们启用的andriod功能来自,显然它们不支持散列标签,您必须制作一个非常特定的渲染器,我猜这不会是微不足道的,但可能是可行的,或者找到一个预先制作的解决方案,您可以采用一种更细粒度的方法。最好的方法是在标签上添加一个手势识别器。我不太清楚您为什么选择自定义渲染器,但我看到您用xamarin.forms标记了这个问题。如果您已经用xamarin表单构建了解决方案,那么添加一个执行命令的手势识别器将是微不足道的。@Spokkruger如果我添加一个手势识别器,它将使整个标签仅指向该标签,如果一篇文章中有两个hashtag或两个标记用户,该怎么办?单击时我如何告诉它运行哪个方法?单击时我如何告诉它运行哪个方法?
[assembly: ExportRenderer(typeof(BodyLabel), typeof(BodyLabelAndroid))]
namespace SocialNetwork.Droid.Renderers
{
public class BodyLabelAndroid : LabelRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
var view = (BodyLabel)Element;
if (view == null) return;
TextView textView = new TextView(Forms.Context);
textView.LayoutParameters = new LayoutParams(LayoutParams.WrapContent, LayoutParams.WrapContent);
textView.SetTextColor(view.TextColor.ToAndroid());
// Setting the auto link mask to capture all types of link-able data
textView.AutoLinkMask = MatchOptions.All;
// Make sure to set text after setting the mask
textView.Text = view.Text;
textView.SetTextSize(ComplexUnitType.Dip, (float)view.FontSize);
// overriding Xamarin Forms Label and replace with our native control
SetNativeControl(textView);
}
}
}
[assembly: ExportRenderer(typeof(BodyLabel), typeof(BodyLabeliOS))]
namespace SocialNetwork.iOS.Renderers
{
public class BodyLabeliOS : ViewRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<View> e)
{
base.OnElementChanged(e);
var view = (AwesomeHyperLinkLabel)Element;
if (view == null) return;
UITextView uilabelleftside = new UITextView(new CGRect(0, 0, view.Width, view.Height));
uilabelleftside.Text = view.Text;
uilabelleftside.Font = UIFont.SystemFontOfSize((float)view.FontSize);
uilabelleftside.Editable = false;
uilabelleftside.DataDetectorTypes = UIDataDetectorType.All;
uilabelleftside.BackgroundColor = UIColor.Clear;
SetNativeControl(uilabelleftside);
}
}
}