【发布时间】:2018-01-28 21:29:08
【问题描述】:
我正在尝试使用户可以单击标签中的某个子字符串并运行一个方法,例如单击 #hashtag 将运行 OpenHashtag(string hashtag 并单击 @ taggedUser 将运行 ViewProfile(taggedUser)
我找到了 this 教程,但我不希望电话号码或 URL 可点击,只希望标签和标记的用户。
这些是它使用的渲染
安卓
[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);
}
}
}
IOS
[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);
}
}
}
【问题讨论】:
-
您将无法使用这些解决方案(至少就 Andriod 而言)。他们启用的安卓功能来自developer.xamarin.com/api/type/Android.Text.Util.MatchOptions,显然它们不支持哈希标签,你必须制作一个非常具体的渲染器,我猜这不会是微不足道的(但可能),或者找到一个你可以适应的预制解决方案更细粒度的方法
-
最好的方法是在标签上添加手势识别器。我不太清楚你为什么选择自定义渲染器,但我看到你用 xamarin.forms 标记了这个问题。如果您已经在 xamarin 表单中构建了解决方案,那么添加一个执行命令的手势识别器将是微不足道的。
-
@SpookKruger 如果我添加了一个手势识别器,它将使整个标签只直接指向那个标签,如果帖子中有两个主题标签或两个标签用户怎么办?
标签: c# xamarin xamarin.forms xamarin.ios xamarin.android