addTextChangedListener
是android文本框改变的一个监听器,一般用于统计文本输入、监测输入是否符合规范等。要想监听文本框的文本改变情况需要实现:beforeTextChanged、onTextChanged、 afterTextChanged三个方法。这里主要用来检测是否输入内容,若输入内容,则显示搜索按钮,以及×号的出现。
输入内容时:
未输入内容时:
licheng.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
lc_end=licheng.getText().toString().trim();
//Toast.makeText(MainActivity.this, lc_end+"enen", Toast.LENGTH_SHORT).show();
if(lc_end.equals("")) {
//Toast.makeText(MainActivity.this, "HI", Toast.LENGTH_SHORT).show();
btn_search.setVisibility(Button.GONE);
Drawable leftDrawable = getResources().getDrawable(R.drawable.ic_search_grey_600_24dp);
leftDrawable.setBounds(0, 0, leftDrawable.getMinimumWidth(), leftDrawable.getMinimumHeight());
licheng.setCompoundDrawables(leftDrawable, null, null, null);
}else{
//Toast.makeText(MainActivity.this, "hello", Toast.LENGTH_SHORT).show();
btn_search.setVisibility(Button.VISIBLE);
Drawable rightDrawable = getResources().getDrawable(R.drawable.ic_clear_black_18dp);
rightDrawable.setBounds(0, 0, rightDrawable.getMinimumWidth(), rightDrawable.getMinimumHeight());
Drawable leftDrawable = getResources().getDrawable(R.drawable.ic_search_grey_600_24dp);
leftDrawable.setBounds(0, 0, leftDrawable.getMinimumWidth(), leftDrawable.getMinimumHeight());
licheng.setCompoundDrawables(leftDrawable, null, rightDrawable, null);
}
}
});
主要使用的是afterTextChanged方法,在文本框中文本变化之后,当输入内容为空时,设置button为GONE即不显示,同时不显示文本框中搜索图片;当输入内容不为空时,设置button为VISIBLE即显示,同时显示搜索图片和×号。
setOnTouchListener
是对某一个控件某一个View是否点击的监控器,一般用于判断某控件是否被点击,想要监控控件是否被点击需要实现:onTouch()方法。这里用来判断文本框中的×号是否被点击,如果点击了,则文本框中的内容设置为空。
licheng.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Drawable drawable = licheng.getCompoundDrawables()[2];
//如果右边没有图片,不再处理
if (drawable == null)
return false;
//如果不是按下事件,不再处理
if (event.getAction() != MotionEvent.ACTION_UP)
return false;
if (event.getX() > licheng.getWidth()
- licheng.getPaddingRight()
- drawable.getIntrinsicWidth()){
licheng.setText("");
}
return false;
}
});
首先判断是否×号图片是否存在,若为true,则判断是否为按下事件,若为true,则判断按下区域是否为×号图片所在位置,若为true,则文本框内容为空。
setOnEditorActionListener
是给文本框添加编辑监听事件,需要注意的是 setOnEditorActionListener这个方法,并不是在我们点击EditText的时候触发,也不是在我们对EditText进行编辑时触发,而是在我们编辑完之后点击软键盘上的回车(这里为搜索)键才会触发。这里对回车按钮进行监控,若文本框内容为空,点击之后弹出提示,若不为空,进入到下一个activity。
licheng.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
String lc_end=licheng.getText().toString();
if(TextUtils.isEmpty(lc_end)) {
Toast.makeText(MainActivity.this, "查询内容不能为空", Toast.LENGTH_SHORT).show();
licheng.requestFocus();
InputMethodManager imm = (InputMethodManager) licheng.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
}else{
xlm=sp_xlm.getSelectedItem().toString();
positi=sp_xlm.getSelectedItemPosition();
traData();
}
return false;
}
});
这里提示是用toast来显示的,传递数据用了一个方法。