Xamarinフォームでラベルのテキストの一部をクリック可能にし、別の機能を実行し、理想的には異なる書式を使用する方法を探しています。私はネイティブのAndroidでやったアプリで動作を模倣しているよ、基本的にXamarinで部分テキストをクリック可能ラベル
Label label = new Label { Text = "Click me" };
label.Click +=() => { label.Text = "Clicked"; };
:私は、クリック可能なラベルが簡単であり、このような何かを行うことができることを理解しています。私のアプリはAndroidとiOS、理想的にはUWPで動作する必要があります。 Androidでは、CharSequenceオブジェクトをTextView(Labelと同様のコントロール)に追加できます。 Androidでは、次のようなCharSequenceオブジェクトを作成します。
Runnable doSomething; //equivalent to C# Action; assuming initialized somewhere
String myString = "My Clickable String"; //the clickable string
Spannable span = Spannable.Factory.getInstance().newSpannable(myString); //this is the clickable text to add to TextView
span.setSpan(new ClickableSpan() {
@Override
public void onClick(View v) {
doSomething.run(); //perform the action
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setUnderlineText(true); //make underlined
ds.setColor(Color.rgb(color.r, color.g, color.b)); //change the color
ds.setFakeBoldText(true); //make it bold
ds.setTextSize((float) largeFont); //change the text size
}
}, 0, a.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //style and function for the entire string
ご覧のとおり、関数を実行し、スタイル属性を持ちます。これをTextViewに追加することができます(SpannableはCharSequenceを実装するSpannedを実装しています)。私が望むように、クリックできないストリングに加えて、複数のCharSequenceを追加することができます。
私はXamarinでこれを行うことができる方法を望んでいますが、まだ解決策が見つかりませんでした。可能であれば、クロスプラットフォームのソリューションが望ましいと感じていますが、私はカスタムレンダラの可能性を考えました。私ははるかにiOSに精通していませんが、NSMutableAttributedStringオブジェクトをUILabelに追加して同様の効果が得られるようです。私はまた、FancyLabelオブジェクトを見てきました。私は私の研究で実際にはあまり見つけられなかったので、UWPのためにこれをどうやってやるのかは分かりません。
ご協力いただければ幸いです。
私はこのことを理解したいと思います。私は最終的にあきらめて、 'TapGestureRecognizer'を使ってラベル全体をクリック可能にしました。むしろ特定の言葉だけをクリック可能にすることが多いでしょう。 – hvaughan3
個人的には独自のカスタムコントロール(MyLabel:UILabel)を作成し、範囲の開始と範囲の終了に2つのpublic intを追加します。ジェスチャーレコグナイザーを追加し、文字列配列(label.text)のタップのインデックスを作成し、必要なアクション/イベントを追加します。それは私の頭の上の大まかな考えです。 – Digitalsa1nt
これは現在X.Formsラベルでは不可能です。参照:https://forums.xamarin.com/discussion/26882/formatted-label-with-xamarin-forms。 LabelにはFormattedStringプロパティがありますが、テキストのフォント、サイズ、色を変更するだけで、テキストの一部にはリンクを追加することはできません。 TextView(Android)/ UILabel(iOS)の途中にリンクを追加するプラットフォーム固有のメソッドを使用するには、カスタムレンダラーを使用する必要があります。代わりに、ローカルHTMLを読み込んだWebViewを使用することもできます。 – jgoldberger