2013-10-07 46 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

嘗試setHighlightColor(Color.TRANSPARENT)。這將工作。雖然,如果您在可點擊的文本上使用此點擊,則根本不會產生任何亮點。 – portfoliobuilder

回答

2

只要你對你的對話框的onClick方法中添加Selection.setSelection(spanTerms, 0);

0

如果你想被點擊文本只有一次,那麼你可以不喜歡這樣。 添加一個布爾變量isClickedOncefalse初始化,然後前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(); 
        } 


       } 

      };