16

android:autoLinkリンクの書式設定などに Just fine を使用してきましたが、使用する必要があるandroid:onClickため、この場合は使用できません。その理由は、電話番号をうっかりクリックしてしまいがちなので、確認でクリックを傍受してから電話をかけようと思っているからですDialog

TextView電話番号を通常のクリック可能なリンクのように見せる簡単な方法はありますか? Android のソース コードを調べてみましたが、参照できる特定のスタイルが見つかりませんでした。

4

7 に答える 7

3

TextViewのテキストに下線を引くには、次のような操作を行う必要があります。

final TextView text = (TextView) findViewById(R.id.text);

SpannableString string = new SpannableString("This is the uderlined text.");
string.setSpan(new UnderlineSpan(), 0, string.length(), 0);
text.setText(string);

これは機能するはずです。進捗状況を教えてください。

于 2012-08-05T23:30:58.790 に答える
3
  • 色を含む、colors.xml リソース ファイルを作成できます。カラーズをご覧ください
  • テキストに下線を引きたい場合は、この投稿をご覧ください: 下線
  • クリック可能にするために、 TextViews にandroid:clickable="true"またはを追加することを忘れないでください!setClickable(true)
于 2012-08-05T22:31:08.303 に答える
3

Linkify は優れたクラスです。URL や電話番号などの複雑なパターンを探して、それらを URLSpans に変換します。既存の正規表現を書き直すのではなく、URLSpan クラスを拡張し、電話の URLSpanのみを確認ダイアログ付きのカスタム URLSpan にアップグレードするメソッドを作成しました。

まず、私の拡張 URLSpan クラス、ConfirmSpan:

class ConfirmSpan extends URLSpan {
    AlertDialog dialog;
    View mView;

    public ConfirmSpan(URLSpan span) {
        super(span.getURL());
    }

    @Override
    public void onClick(View widget) {
        mView = widget;

        if(dialog == null) {
            AlertDialog.Builder mBuilder = new AlertDialog.Builder(widget.getContext());
            mBuilder.setMessage("Do you want to call: " + getURL().substring(4) + "?");
            mBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            })
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    openURL();
                }
            });
            dialog = mBuilder.create();
        }
        dialog.show();
    }

    public void openURL() {
        super.onClick(mView);
    }
}

次に、さまざまなスパン クラスを交換する方法を示します。

private void swapSpans(TextView textView) {
    Spannable spannable = (Spannable) textView.getText();
    URLSpan[] spans = textView.getUrls();
    for(URLSpan span : spans) {
        if(span.getURL().toString().startsWith("tel:")) {
            spannable.setSpan(new ConfirmSpan(span), spannable.getSpanStart(span), spannable.getSpanEnd(span), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            spannable.removeSpan(span);
        }
    }
}

最後に、autoLink 属性を使用して TextView を作成するだけです。

android:autoLink="phone"

そして、swapSpans()メソッドを呼び出すことを忘れないでください。楽しみのためにこれを書いたことを理解してください。これを行う他の方法があるかもしれませんが、現時点では知りません。お役に立てれば!

于 2012-08-06T01:55:24.947 に答える