我试图在EditText上实现此效果:
使用TextWatcher
和setCompoundDrawables
,
这是我的代码:
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);
}
});
在代码中,我评论了什么不起作用:" //这不起作用"
我有两个问题:
我应该使用什么drawable用于动画微调器/加载? android.R.drawable。的什么
使用我选择的测试图标(ic_menu_call)无效。我总是看到搜索图标,而不是"电话"图标。
我想在用户输入时看到其他非搜索图标(微调器)
答案 0 :(得分:1)
问题是beforeTextChanged
和onTextChanged
发生得太快,以致EditText
没有时间将drawable从一个改为另一个,从而只给你添加的最后一个drawable 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
,它只需要您的drawable文件夹或android默认drawable文件夹中的drawable或bitmap。