单击后,ClickableSpan TextView保持选中状态

时间:2013-10-07 19:09:03

标签: android

我正在使用以下代码使我的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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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();
                    }


                }

            };

答案 2 :(得分: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);
}

答案 3 :(得分:0)

只是:

textView.setHighlightColor(Color.TRANSPARENT);