2015-06-09 24 views
0

我正在基於從xml文章中解析的文本動態地在活動上填充textviews。該文本是使用HTML標籤格式化,所以我喜歡設置文本:如何知道TextView的哪一部分被選中

textViewBody.setText(Html.fromHtml(content)); 

的文章被設置爲無論是在身體的網站一些文字,到另一個地方的文章,或簡單地顯示文本。之前,我們只有最多1個鏈接,所以我用這個代碼:

textViewBody.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if (textViewBody.getUrls().length != 0) { 
         String link = textViewBody.getUrls()[0].getURL(); 

         Intent i; 

         if (link.startsWith("article")) { 
          i = new Intent(getActivity().getApplicationContext(), ArticleActivity.class); 
          i.putExtra("file", link.substring(10)); 
          i.putExtra("title", parentView.article.title); 
          startActivity(i); 
         } else if (link.startsWith("http")) { 
          i = new Intent(Intent.ACTION_VIEW); 
          i.setData(Uri.parse(link)); 
          startActivity(i); 
         } 
        } else { 
         // Regular body text was selected. 
        } 
       } 
      }); 

這完美地工作,但現在的一些文章有多個鏈接,只打開第一個(因爲那是什麼我設定它)。我的問題是,我怎樣才能設置textview知道我點擊了什麼鏈接?再說一遍,這段文字是動態的(並且大約有200多篇xml文章),所以我不可能僅僅根據已知的鏈接列表來檢查字符串的內容。

可能很重要的一點是,這是在一個片段上完成的(ArticleActivity是一個tabHost,其中一個標籤顯示文章的文本)。

回答

0

甚至不要嘗試通過onTouch來做到這一點。使用Spannables,並將每個鏈接放在可點擊的範圍內 - http://developer.android.com/reference/android/text/style/ClickableSpan.html。然後當文本被點擊時,它的onClick方法將被調用,並且它可以執行它需要的任何操作。

+0

選定的文本花了一些額外的代碼到位,但是這使我我的解決方案。 –

0

我認爲這是簡單的方式來獲得選定的文本,發現始端和終端上的TextView

TextView mTextView = findViewById(R.id.textView); 
if (mTextView.isFocused()) { 
    final int selStart = mTextView.getSelectionStart(); 
    final int selEnd = mTextView.getSelectionEnd(); 
    int min = Math.max(0, Math.min(selStart, selEnd)); 
    int max = Math.max(0, Math.max(selStart, selEnd)); 
    final CharSequence selectedText = mTextView.getText().subSequence(min, max); 
    Toast.makeText(getApplicationContext(), selectedText, Toast.LENGTH_SHORT).show(); 
    selected = selectedCafeWeb; 
    Toast.makeText(getBaseContext(), selected + " " + selectedText.toString(), Toast.LENGTH_SHORT); 
} 
相關問題