Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create a hyperlink using Xamarin.Forms (xaml and c#)

Tags:

I basically want to create a hyperlink in Xamarin.Forms using the label class. Basically, I want to following link to take the user to google.com in a web browser:

<Label Text="http://www.google.com/" /> 

I can't find anything in the Xamarin Forms API about this and the internet has vague and limited information on this topic in Xamarin.Forms.

Is this possible? If so, could someone please point me in the right direction? Thanks in advance to anyone who answers.

like image 498
jnel899 Avatar asked Jun 02 '16 16:06

jnel899


People also ask

How do I add a link in Xamarin?

In your ViewModel, add the following Command. public ICommand ClickCommand => new Command<string>((url) => { Device. OpenUri(new System. Uri(url)); });


2 Answers

You can't really do this because Labels by default don't respond to user input, but you can achieve something similar with gestures

using Xamarin.Forms; using Xamarin.Essentials;  Label label = new Label(); label.Text = "http://www.google.com/";  var tapGestureRecognizer = new TapGestureRecognizer(); tapGestureRecognizer.Tapped += async (s, e) => {     // Depreciated - Device.OpenUri( new Uri((Label)s).Text);      await Launcher.OpenAsync(new Uri(((Label)s).Text)); }; label.GestureRecognizers.Add(tapGestureRecognizer); 
like image 91
Jason Avatar answered Oct 16 '22 06:10

Jason


I made this little class to handle it:

public class SimpleLinkLabel : Label {     public SimpleLinkLabel(Uri uri, string labelText = null)     {         Text = labelText ?? uri.ToString();         TextColor = Color.Blue;         GestureRecognizers.Add(new TapGestureRecognizer { Command = new Command(() => Device.OpenUri(uri)) });     } } 

And a bit more involved if you want to underline it too:

public class LinkLabel : StackLayout {     private SimpleLinkLabel label;      public LinkLabel(Uri uri, string labelText = null, bool underlined = true)     {         // Remove bottom padding         Padding = new Thickness(Padding.Left, Padding.Top, Padding.Right, 0);         VerticalOptions = LayoutOptions.Center;          Children.Add(label = new SimpleLinkLabel(uri, labelText));          if (underlined)             Children.Add(new BoxView { BackgroundColor = Color.Blue, HeightRequest = 1, Margin = new Thickness(0, -8, 0, 0) });     }      public TextAlignment HorizontalTextAlignment { get { return label.HorizontalTextAlignment; } set { label.HorizontalTextAlignment = value; } } } 

The latter class inspired by this post: how to underline in xamarin forms


Edit: XLabs have a HyperLinkLabel too.

like image 29
noelicus Avatar answered Oct 16 '22 05:10

noelicus