2017-01-23 39 views
0

テキストを表示するダイアログが必要です。このテキストでは、電話番号がある場合とない場合があります。 私はこれらの電話番号を認識するための正規表現を持っているので、どこにいるのか分かります。Xamarin.Formsテキストに電話番号ハイパーリンク(0〜多数)を埋め込む

私は、ユーザーが電話番号をクリックして操作を行う方法を知らない(私はすでにコードを持っている電話アプリを起動する)。

ラベルやエディタの一部をフォーマットしたり、ハイパーリンクを埋め込んだりすることはできないようです。

テキスト形式を保持する(分割しない)場合は、ラベル全体をクリックする以外の選択肢はありませんか?

私の唯一のアイデアは、電話番号を解析し、複数のラベルを動的に作成することでした。それぞれの電話番号は独自の別のラベルであり、太字で書式設定してタップジェスチャーアクションを提供できます。これの問題はフォーマットです。

私が見ていない解決策はありますか?

+1

? – Gusman

+1

iOSの 'UITextView'に' UIDataDetectorType.PhoneNumber'とAndroidの 'TextView'を割り当てることができる' DataDetectorTypes'プロパティがあります。電話番号を 'MatchOptions.PhoneNumbers'と' Linkify'することはできますが、*単純な 'Xamarin.Forms '' native 'の機能を使用するカスタムのクロスプラットフォームコントロールを作成する代わりに '' WebView'を使用する際の@Gusmanの提案と電話URIリンクを含むhtmlが動作します(ディスプレイのレンダリングではより高いメモリ消費/わずかに遅くなります) – SushiHangover

+0

@SushiHangoverはそれは最高の解決策ですが、私はこれを実装する時間が限られていますので、まずはwebviewを探索します –

答えて

0

Gusmanからのコメントのおかげで、WebViewを使用したソリューションが見つかりました。 私は次のようにHTMLのアンカーとテキストで電話番号を交換するので、

555.555.5555 - ><a href='555.555.5555'>555.555.5555></a>

私は、その後、OnNavigatingイベントを処理要求をキャンセルし、代わりにから取得した電話番号に電話を開く

url。

のWebView:

<WebView x:Name="EmergencyContactInfoWebView" HorizontalOptions="Center" HeightRequest="150" Navigating="OnNavigating"> 
</WebView> 

OnNavigtaingイベントハンドラ:たぶんのWebViewを使用して

protected void OnNavigating(object sender, WebNavigatingEventArgs e) 
{ 
    e.Cancel = true; //cancel request 
    int separatorIdx = e.Url.LastIndexOf('/'); 
    string phoneNumber = e.Url.Substring(separatorIdx+1); //parse phone number href from url 
    var phoneDialer = CrossMessaging.Current.PhoneDialer; 
    if (phoneDialer.CanMakePhoneCall) 
    { 
     phoneDialer.MakePhoneCall(phoneNumber); //make the call (using a xamarin forms plugin) 
    } 
} 
関連する問題