2013-10-07 2 views
3

Я использую следующий код, чтобы сделать мой TextView похожим на ссылку, и когда пользователь нажимает на нее, я показываю AlertDialog. Но текст остается выбранным после того, как пользователь покидает диалоговое окно и выглядит уродливо.ClickableSpan TextView остается выбранным после нажатия

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), но это тоже не работает. Есть идеи?

+0

Что вы хотите точно после нажатия ОК в диалоговом окне? – Manishika

+0

Ничего, я просто не хочу, чтобы текст был выбран. – ashishduh

+3

Попробуйте установитьHighlightColor (Color.TRANSPARENT). Это сработает. Хотя, если вы используете этот клик по вашему интерактивному тексту, вы не получите никакого выделения. – portfoliobuilder

ответ

2

Просто введите Selection.setSelection(spanTerms, 0); в свой onClick метод вашего диалога.

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(); 
        } 


       } 

      }; 
Смежные вопросы