2013-03-20 22 views
3

我正在創建一個應用程序,在該應用程序中我從EditText中的用戶處獲得輸入。如何在Textview中點擊Highlite單詞android

現在點擊按鈕後,輸入的字符串顯示在TextView中。現在我的問題是,當用戶點擊任何一個單詞時,我在TextView中突出顯示該單詞。

例如:用戶輸入:你好,朋友你好嗎。

當用戶點擊「Hello」時,它將在TextView中突出顯示。或者當用戶點擊「如何」時,它將被突出顯示。

請幫幫我。

回答

7
public class MainActivity extends Activity { 
TextView _tv; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
_tv = (TextView) findViewById(R.id.tv); 

SpannableString ss = new SpannableString("Hello friend how are you."); 

ss.setSpan(new MyClickableSpan(), 0,5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
ss.setSpan(new MyClickableSpan(), 6, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
ss.setSpan(new MyClickableSpan(), 13, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
ss.setSpan(new MyClickableSpan(), 17, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
ss.setSpan(new MyClickableSpan(), 21, 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

_tv.setText(ss); 
_tv.setMovementMethod(LinkMovementMethod.getInstance()); 
} 
class MyClickableSpan extends ClickableSpan{ //clickable span 
public void onClick(View textView) { 
//do something 

    Toast.makeText(MainActivity.this, "Clicked", 
     Toast.LENGTH_SHORT).show(); 
} 
@Override 
public void updateDrawState(TextPaint ds) { 
    ds.setColor(Color.BLACK);//set text color 
    ds.setUnderlineText(false); // set to false to remove underline 
} 
} 
} 

編輯:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context=".MainActivity" > 

<TextView 
    android:id="@+id/tv" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:layout_marginTop="50dp" 
    android:text="@string/hello_world" /> 

<EditText 
    android:id="@+id/ed" 
    android:layout_width="fill_parent" 
    android:layout_height="40dp" 
    android:layout_marginTop="40dp" /> 

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:layout_marginTop="20dp" 
    android:text="Click" /> 

</LinearLayout> 

您可以分割空間,通過串並設置每個字作爲spannable字符串。然後使可跨越的字符串可點擊。這樣你不需要硬編碼字符串的長度。用戶可以點擊textview中的任何單詞並突出顯示。

public class MainActivity extends Activity { 
TextView _tv; 
String[] each; 
SpannableString ss1; 
Button b; 
EditText et; 
    String s; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
b= (Button) findViewById(R.id.button1); 
et = (EditText) findViewById(R.id.ed); 
_tv = (TextView) findViewById(R.id.tv); 

b.setOnClickListener(new OnClickListener() 
{ 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     s=et.getText().toString(); 
     _tv.setText(""); 
     for(int i=0;i<s.length();i++) 
     { 
      each = s.split("\\s+"); 
     } 
     for(int i=0;i<each.length;i++) 
     { 
      System.out.println("................"+each[i]); 
      ss1= new SpannableString(each[i]); 
      ss1.setSpan(new MyClickableSpan(), 0, ss1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
      _tv.append(ss1); 
      _tv.append(" "); 

     } 
     _tv.setMovementMethod(LinkMovementMethod.getInstance()); 
    } 

    }); 
} 
class MyClickableSpan extends ClickableSpan{ //clickable span 
public void onClick(View textView) { 
//do something 

    Toast.makeText(MainActivity.this, "Clicked", 
     Toast.LENGTH_SHORT).show(); 
} 
@Override 
public void updateDrawState(TextPaint ds) { 
    ds.setColor(Color.BLACK);//set text color 
    ds.setUnderlineText(false); // set to false to remove underline 
} 
} 
} 

http://www.chrisumbel.com/article/android_textview_rich_text_spannablestring。 用於樣式可跨越的字符串。

生成的快照。

enter image description here

+0

用戶可以點擊任何一個字,詞不固定。 – 2013-03-20 17:10:45

+0

根據您的需求檢查編輯和修改。 – Raghunandan 2013-03-20 18:25:10

+0

好的檢查它。 – 2013-03-20 18:32:25

相關問題