2014-08-30 15 views
0

我試圖將實現在此的EditText效果:顯示微調使用 「setCompoundDrawables」 和TextWatcher

Spinner

使用TextWatchersetCompoundDrawables

這是我的代碼:

searchEditText = (EditText) findViewById(R.id.editText_search); 

    searchEditText.addTextChangedListener(new TextWatcher() 
    { 
     CountDownTimer timer = new CountDownTimer(800, 800) 
     { 
      @Override 
      public void onTick(long millisUntilFinished) 
      { 
      } 

      @Override 
      public void onFinish() 
      { 
       Log.i("SearchActivity", "searching.."); 
      } 
     }; 

     @Override 
     public void afterTextChanged(Editable arg0) 
     { 
     } 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) 
     { 
      timer.cancel(); 
      timer.start(); 

      //This is not working: 
      searchEditText.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_menu_call, 0, 0, 0); 
     } 

     @Override 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) 
     { 
      searchEditText.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_menu_search, 0, 0, 0); 
     } 
    }); 

在代碼中,我評論了什麼是不工作:「//這是行不通的」

我有兩個問題:

  1. 我應該使用什麼繪製的動畫微調/加載? android.R.drawable。 什麼

  2. 使用我選擇的測試圖標(ic_menu_call)不起作用。我總是看到搜索圖標,從來沒有「通話」圖標。

我想,雖然用戶鍵入他看到了其他非搜索圖標(微調)

回答

1

的問題是,beforeTextChangedonTextChanged發生得太快,可是沒有時間EditText更改繪製從一個到另一個從而給你只添加這是ic_menu_search

解決方案的最後繪製:

使用你的計時器來改變drawable來給edditText留出時間來改變它裏面的drawable。

樣本:

final EditText searchEditText = new EditText(this); 

    searchEditText.addTextChangedListener(new TextWatcher() 
    { 
     CountDownTimer timer = new CountDownTimer(1000, 800) 
     { 
      @Override 
      public void onTick(long millisUntilFinished) 
      { 
       searchEditText.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_menu_call, 0, 0, 0); 

      } 

      @Override 
      public void onFinish() 
      { 
       Log.i("SearchActivity", "searching.."); 
       searchEditText.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_menu_search, 0, 0, 0); 
      } 
     }; 

     @Override 
     public void afterTextChanged(Editable arg0) { } 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) 
     { 
      timer.cancel(); 
      timer.start(); 
     } 

     @Override 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { } 
    }); 

正如你可以看到我設置你的計時器持續時間1秒所以EditText有時間改回到另一個繪製。

對於問題1和問題2,您不能將View添加到setCompoundDrawablesWithIntrinsicBounds,它只需要在您的可繪製文件夾或android默認可繪製文件夾中繪製或位圖。

+0

第一部分作品完美,謝謝。雖然我沒有遵循最後的部分:所以我不能在EditText中放置一個動畫加載圖標? – sports 2014-08-30 04:12:08

+1

@sports是的,你是對的。 'setCompoundDrawablesWithIntrinsicBounds'只接受可繪製文件夾的位圖,'Drawables'表示純圖像而不是動畫。 – 2014-08-30 04:14:21

+0

啊!無賴。所以我將不得不使用Layout並模仿editText的邊框,或類似的東西。 – sports 2014-08-30 04:38:37