2014-01-16 2 views
8

특정 항목이 포함 된 ListView가 있고 목록에 EditText을 두어 사용자에게 Search 기능을 제공합니다. EditText 안에 타이핑하여 임의의 버튼 등을 클릭함으로써, 사용자는 특정 항목이리스트에 존재하는지 여부를 검색 할 수있다.안드로이드에서 목록 내에서 검색중인 특정 문자/문자의 색을 변경하는 방법

내가 원하는 것은 : 사용자가 입력 한 문자/문자가 목록 항목 내에 있으면 those letters only을 RED 또는 BLUE 또는 다른 색상으로 변경해야합니다. 예를 들어 과일 목록이 있는데 Apple을 검색 중이므로 app ... le을 입력하면 사용자가 입력 한 문자 인 app (이 경우)의 색만 변경해야합니다 Apple이 목록에 있으면 RED, BLUE 또는 다른 색상으로 변경하십시오.

안드로이드에서 할 수 있는지 여부를 말할 수있는 사람이 있는지, 그렇다면 어떻게 할 수 있습니까? ,

editText.addTextChangedListener(new TextWatcher(){ 
    public void afterTextChanged(Editable s) { 
     //retrieve the typed text lecter ad char array something like typedChar[] 
     //Here parsing the List and modify the lecter 
    } 
    public void beforeTextChanged(CharSequence s, int start, int count, int after){} 
    public void onTextChanged(CharSequence s, int start, int before, int count){} 
}); 

그런 다음 우리가있는 ListView를 다시로드해야합니다

styledtext="This is <font color='red'>simple</font>."; 
editText.setText(Html.fromHtml(styledText)); 
+2

내가 너무 일을 알고 싶습니다. –

+0

나도 그래! 많은'TextView'를 사용하는 것은 어떨까요? 나는 그것이 좋은 방법이라고 생각하지 않는다 ...?! –

+2

ForegroundColorSpan을 설정하기 위해 SpannableStringBuilder를 사용하십시오. – pskink

답변

3

그 작업을 수행하는 더 간단하게 방법은 TextChangedListener를 등록하는 것입니다

0

어쩌면 미리 감사드립니다, 당신은 같은 것을 사용할 수있다 어댑터에서 notifyDataSetChanged()를 사용할 수 있습니다 (이벤트를 실행하기 위해 무엇인가 변경해야 함)

myListViewAdapter.notifyDataSetChanged() 

마지막으로 어댑터에서 :

public class CustomAdapterOptimize extends ArrayAdapter<Contatto> { 

     public CustomAdapterOptimize(Context context, int textViewResourceId, 
      List<Contatto> objects) { 
      super(context, textViewResourceId, objects); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      TextView tx = (TextView)convertView; 
      SpannableString text = getItem(position); 
      for(char:typedChar) 
      if(tx.getText().contains(char)){ 
       // make "text" (characters pos-1 to pos) red 
       text.setSpan(new ForegroundColorSpan(Color.RED), tx.getText().indexOf(char) - 1, tx.getText().indexOf(char), 0); 
       textView.setText(text, BufferType.SPANNABLE); 
      } 
     } 
} 

이 코드는 성능 및 논리에 맞게 조정되어야하지만 이는 좋은 시작일 수 있습니다.

3

내 짧은 손 예는이 작업을 수행하기 위해 고려 :이 도울 수

textView = (TextView)findViewById(R.id.text); 

    SpannableString spantext = new SpannableString("Nitesh Tiwari"); 

    spantext.setSpan(new ForegroundColorSpan(Color.BLUE), 0, 6, 0); 

    //This Will Print Nitesh In Blue Color 

    spantext.setSpan(new RelativeSizeSpan(1.0f), 7, 12, 0); 

// This will print "Tiwari" 1x bigger than the remaining Figure 

    textView.setText(spantext, BufferType.SPANNABLE); 

희망 ...

관련 문제