1. 程式人生 > >android 獲取textview中我們所點選的某個字(句)

android 獲取textview中我們所點選的某個字(句)

通常我們為textview繫結點選事件只能監聽整個textview的點選時間,如我們想獲取我們實際點的是哪一個字可通過以下方法實現

(textview可以繫結單擊或長按監聽器)

textView = (TextView) findViewById(R.id.word);
SpannableStringBuilder s = new SpannableStringBuilder(textView.getText());
for(int i=0;i<s.length();i++){
    s.setSpan(new ClickableSpan() {
        @Override
        public void onClick(View v) {
        }
        @Override
        public void updateDrawState(TextPaint ds) {
            super.updateDrawState(ds);
            ds.setColor(0xff000000);       //設定檔案顏色
            ds.setUnderlineText(false);      //設定下劃線
        }
    },i,i+1, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
}
//設定textview中所有文字為spannable格式
textView.setText(s,TextView.BufferType.SPANNABLE);
//啟用上面為每個字繫結的ClickableSpan
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //若沒有繫結clickableSpan,無法使用subSequence方法
        //若tv.getSelectionStart()-1,則輸出點選的文字以及其上一個文字
        //若tv.getSelectionEnd()+1,則輸出點選的文字以及其下一個文字,如此類推
        //通過標點判斷還可擷取一段文字中我們所點選的那句話
        TextView tv = (TextView) v;
        String s = tv
                .getText()
                .subSequence(tv.getSelectionStart(),
                        tv.getSelectionEnd()).toString();
        Log.d("tapped on:", s);
    }
});