4

我正在使用以下代码使我TextView看起来像一个链接,当用户点击它时,我会显示一个AlertDialog. 但是在用户离开对话框后文本保持选中状态,看起来很难看。

    TextView terms = (TextView)findViewById(R.id.TextViewTerms);
    terms.setMovementMethod(LinkMovementMethod.getInstance());
    Spannable spanTerms = (Spannable)terms.getText();
    ClickableSpan clickSpan = new ClickableSpan()
    {
        @Override
        public void onClick(final View view)
        {
            new AlertDialog.Builder(AboutActivity.this)
                .setTitle(R.string.title_terms)
                .setMessage(R.string.terms_of_use)
                .setCancelable(true)
                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        dialog.dismiss();
                    }
                })
                .show();
        }
    };

    spanTerms.setSpan(clickSpan, 0, spanTerms.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

我也试过打电话setSelected(false),但这也不起作用。有任何想法吗?

4

4 回答 4

3

只需Selection.setSelection(spanTerms, 0);onClick对话框的方法中添加即可。

于 2013-10-07T20:14:05.640 回答
0

如果您希望您的文本只被点击一次,那么您可以这样做。添加一个布尔变量isClickedOnce初始化它false,然后在AlertDialog.Builder检查它是否false像下面的代码之前:

ClickableSpan clickSpan = new ClickableSpan() {
                @Override
                public void onClick(final View view) {
                    if (!isClickedOnce) {
                    new AlertDialog.Builder(AboutActivity.this)
                            .setTitle("title_terms")
                            .setMessage("terms_of_use")
                            .setCancelable(true)
                            .setPositiveButton(android.R.string.ok,
                                    new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(
                                                DialogInterface dialog,
                                                int which) {
                                            isClickedOnce = true;
                                             Log.i("isClickedOnce","isClickedOnce"+isClickedOnce);
                                            dialog.dismiss();


                                        }
                                    }).show();
                    }


                }

            };
于 2013-10-07T20:31:04.753 回答
0

只是:

textView.setHighlightColor(Color.TRANSPARENT);
于 2019-04-02T10:58:37.900 回答
0

您可以通过自定义 TextView 执行此操作。基本上,仅当视图处于按下状态时才启用突出显示。

@Override
public void setPressed(boolean pressed) {
    if (pressed) {
        setHighlightColor(ContextCompat.getColor(getContext(), R.color.highlight_color));
    } else {
        setHighlightColor(Color.TRANSPARENT);
    }
    super.setPressed(pressed);
}
于 2019-02-14T18:57:52.400 回答