EditText 监听事件 - litonghui/TechBlog GitHub Wiki

Android 开发中 EditText 输入监听

相关代码

public class EditTextActivity extends Activity {

public static final String TAG = "EditTextActivity";
private Context mContext;
private EditText mEditText;
private ImageView mCleanView;
private String mEditMsg;/*动态记录EditText 内容*/
private InputMethodManager mInputMg;/*调取键盘*/

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_edittext);
	init();
}

private void init() {
	mContext = this;
	mInputMg = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
	mCleanView = (ImageView) findViewById(R.id.search_clean);
	mCleanView.setVisibility(View.GONE);
	mCleanView.setOnClickListener(new OnClickListener() {

		@Override
		public void onClick(View v) {
			mEditText.setText(null);
			mEditMsg = null;
		}
	});
	mEditText = (EditText) findViewById(R.id.search_input);

	/* 聚焦 */
	mEditText.requestFocus();
	/* 调用软键盘 */
	mEditText.postDelayed(new Runnable() {

		@Override
		public void run() {
			mInputMg.hideSoftInputFromWindow(mEditText.getWindowToken(),
					InputMethodManager.HIDE_NOT_ALWAYS);

		}
	}, 100);
	/* 检测输入内容 */
	mEditText.addTextChangedListener(new TextWatcher() {
            /*private TextWatcher mEditText = new TextWatcher(){* //*可用通过接口使用*/
		@Override
		public void onTextChanged(CharSequence s, int start, int before,
				int count) {

		}

		@Override
		public void beforeTextChanged(CharSequence s, int start, int count,
				int after) {

		}

		@Override
		public void afterTextChanged(Editable s) {
			mEditMsg = s.toString();/* 动态获取EditText 内容 */
			if (!TextUtils.isEmpty(mEditMsg)) {
				mCleanView.setVisibility(View.VISIBLE);
			} else {
				mCleanView.setVisibility(View.GONE);
			}
			/* 获取输入相关内容 */
			if (TextUtils.isEmpty(s.toString())) {
				
			}else {
				Toast.makeText(mContext, "正在加载相关内容。。。", 2000).show();
                                    /*可以从服务器上获取输入关键字相关的内容,一下拉列表形式显示*/
			}

		}
	});
	/* 监听输入状态 */
	mEditText.setOnEditorActionListener(new OnEditorActionListener() {

		@Override
		public boolean onEditorAction(TextView v, int actionId,
				KeyEvent event) {
			if (actionId == 0 && event.getAction() == KeyEvent.ACTION_DOWN) {
				Toast.makeText(mContext, "正在查找。。。", 2000).show();                                        
				return true;
			}
			return false;
		}
	});
}

@Override
protected void onDestroy() {
	super.onDestroy();
}

}

添加相关的xml

<RelativeLayout
    android:id="@+id/search_container"
    android:layout_width="match_parent"
    android:layout_height="36dp"
    android:layout_centerVertical="true"
    android:descendantFocusability="afterDescendants" >

    <ImageView
        android:id="@+id/search_clean"
        android:layout_width="33dp"
        android:layout_height="36dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="0dp"
        android:contentDescription="@null"
        android:scaleType="center"
        android:src="@drawable/search_cancel" />

    <EditText
        android:id="@+id/search_input"
        android:layout_width="fill_parent"
        android:layout_height="36dp"
        android:background="@null"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:imeOptions="actionSearch"
        android:inputType="text"
        android:maxLength="20"
        android:singleLine="true"
        android:textCursorDrawable="@null"
        android:textSize="15sp" />
</RelativeLayout>