Я занимаюсь разработкой приложения для чата в xamarin.forms. Для моей метки чата я использовал собственную метку, которая могла автоматически обнаруживать HTTP-ссылки. Ссылка, по которой я перешел, HyperLink Label . Это работает хорошо, URL-адреса подсвечиваются и открываются в браузере по умолчанию, но я хотел бы иметь возможность перехватить событие щелчка URL-адреса и открыть вместо него внутренний браузер или веб-просмотр. В настоящее время при щелчке по гиперссылке открываются предложения по выбору других приложений браузера. Я вижу этот похожий вопрос в xamarin.forum . Но я не понял решения. Итак, как я могу открыть гиперссылку во внутреннем браузере или веб-просмотре? Любая помощь приветствуется.
Метка детектора гиперссылки
public class AwesomeHyperLinkLabel : Label
{
}
Android Деталь
[assembly: ExportRenderer(typeof(AwesomeHyperLinkLabel), typeof(AwesomeHyperLinkLabelRenderer))]
namespace WhateverYourNamespace
{
public class AwesomeHyperLinkLabelRenderer : LabelRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
var view = (AwesomeHyperLinkLabel)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(AwesomeHyperLinkLabel), typeof(AwesomeHyperLinkLabelRenderer))]
namespace WhateverYourNamespace
{
public class AwesomeHyperLinkLabelRenderer : 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;
// Setting the data detector types mask to capture all types of link-able data
uilabelleftside.DataDetectorTypes = UIDataDetectorType.All;
uilabelleftside.BackgroundColor = UIColor.Clear;
// overriding Xamarin Forms Label and replace with our native control
SetNativeControl(uilabelleftside);
}
}
}
Мой XAML
<controls:HyperLinkLabel TextColor="White" Text="www.google.com" HorizontalOptions="Start" />