2012-05-28 2 views
4

В настоящее время я создаю поисковую систему, такую ​​как приложение для Android, и хочу выделить искомое слово из edittext в textview ... это то, что я получил до сих пор, и он выделяет только первое слово в текстовом видеВыделите Textview с помощью EditText

TV.setText("Hello World", TextView.BufferType.SPANNABLE); 
      Spannable WordtoSpan = (Spannable) TV.getText(); 
      WordtoSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), 0, notes.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      TV.setText(WordtoSpan); 

ответ

5

Я думаю, вы хотите выделить конкретное слово TextView, которое пользователь вводит в EditText. Скажите et - это ваш EditText и tv - объект TextView. Используйте следующий код:


String ett =et.getText().toString(); 
    String tvt =tv.getText().toString(); 

       int index = tvt.indexOf(ett); 

       Spannable WordtoSpan = new SpannableString(tv.getText()); 
       if(index != -1) 
       { 
       WordtoSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), index, index+ett.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
       tv.setText(WordtoSpan, TextView.BufferType.SPANNABLE); 
       } 
       else 
       tv.setText("The name of our country is Bangladesh"); 

Вот результат:

enter image description here


Вот полный код:

public class MotivationalQuotesActivity extends Activity { 
     /** Called when the activity is first created. */ 

    Button next; 
    EditText et; 
    TextView tv; 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
     et = (EditText) findViewById(R.id.et); 
     tv = (TextView) findViewById(R.id.tv); 
     tv.setText("The name of our country is Bangladesh"); 

     next = (Button) findViewById(R.id.button1); 
     next.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        // TODO Auto-generated method stub 

        String ett =et.getText().toString(); 
        String tvt =tv.getText().toString(); 

        int index = tvt.indexOf(ett); 

        Spannable WordtoSpan = new SpannableString(tv.getText()); 
        if(index != -1) 
        { 
        WordtoSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), index, index+ett.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
        tv.setText(WordtoSpan, TextView.BufferType.SPANNABLE); 
        } 
        else 
        tv.setText("The name of our country is Bangladesh"); 


       } 
      }); 

     } 

    } 
+0

делают эту работу, даже если есть 2 или более же слово, что набирается? – Mordiggian

+0

СПАСИБО ВАМ ОЧЕНЬ ДЛЯ этого .. но если вы знаете, как выделить все те же слова, которые были напечатаны в edittext, которые мне очень помогли: D БЛАГОДАРИМ ВАС СНОВА ДЛЯ ЭТОГО – Mordiggian

+0

жаль, что я уже опробовал это раньше, но он всегда говорит Требуется 15 или более репутации ... моя репутация просто выросла в эти моменты, поэтому теперь я могу поддержать свой ответ. Жаль, что если мой комментарий выглядит как не принимающий ваш ответ .. – Mordiggian

1

это может помочь

TextView tv = (TextView) findViewById(R.id.hello); 
    SpannableString s = new SpannableString(getResources().getString(R.string.linkify)); 

    Pattern p = Pattern.compile("abc"); 


    Matcher m = p.matcher(s); 

    while (m.find()) { 
     int start = m.start(); 
     int end = m.end(); 
     s.setSpan(new ForegroundColorSpan(Color.RED), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } 
    tv.setText(s); 
+0

Привет, добро пожаловать в SO. Вместо того, чтобы просто сбрасывать код, вы должны объяснить свой ход мысли, чтобы помочь пользователям понять, что вы делаете. Благодарю. – Cthulhu

+0

это лучше всего, очень спасибо –

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