if (TextUtils.isEmpty(data)) {
_data_editText.setCompoundDrawablesWithIntrinsicBounds(null,
null, null, null);
return;
}
_data_editText.setCompoundDrawablesWithIntrinsicBounds(null, null,
_clear_drawable, null);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// Log.e("TEST","3");
}
};
private OnTouchListener _search_OnTouch = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP: {
int curX = (int) event.getX();
String data = _data_editText.getText().toString();
if (TextUtils.isEmpty(data)) {
return false;
}
boolean isClearPosition = (curX > v.getWidth() - 88);
if (isClearPosition) {
Clear(event);
return true;
}
}
default: {
break;
}
}
return false;
}
private void Clear(MotionEvent event) {
int cacheInputType = _data_editText.getInputType();// backup
// the
// input
// type
_data_editText.setInputType(InputType.TYPE_NULL);// disable
// soft
// input
_data_editText.onTouchEvent(event);// call native handler
_data_editText.setInputType(cacheInputType);// restore input
// type
// addHint();
_data_editText.setText("");
}
};
}
注:
(1)、给_search_button定义一个id,以便响应点击事件。此处的SearchWidget.SEARCH_ID在实际中可能会与xml中定义的ID值有冲突,可以根据实际的情况作相应的调整。
(2)、定义HINT_NAME,以便在xml中调用搜索框控件时使用hint属性。
(3)、InitAttrs方法中,过虑出hint属性。
(4)、_data_editText.setHint(_hint)中设置输入框的内容提示。
(5)、BindingEvents添加_data_editText的文件改变和触摸事件的监听。
(6)、增加getSearchData函数供外部调用。
(7)、增加setSearchOnClickListener供外部设置搜索按钮的监听事件。
(8)、setCompoundDrawablesWithIntrinsicBounds动态修改输入框右侧的图标。
(9)、在_data_editText的layoutParams的布局参数设置中,将其宽度设置为0,高度设置为充满父容器,比重设置为1,以确保充满搜索按钮外的空间。
调用代码:
package com.example.searchframetest;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class MainActivity extends Activity {
private SearchWidget _search_widget = null;
private TextView _result_text=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Init();
}
private void Init() {
FetchUIControls();
BindingEvents();
}
private void FetchUIControls() {
_search_widget = (SearchWidget) findViewById(R.id.searchWidget);
_result_text = (TextView) findViewById(R.id.result);
}
private void BindingEvents() {
_search_widget.setSearchOnClickListener(_clickListener);
}
private OnClickListener _clickListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case SearchWidget.SEARCH_ID: {
Search();
break;
}
default: {
break;
}
}
}
};
protected void Search() {
String data=_search_widget.getSearchData();
_result_text.setText(data);
}
}
注:
(1)、使用常用的获取控件的方式来获取SearchWidget。
(2)、为搜索按钮设置监听事件时,使用SearchWidget.SEARCH_ID来区别点击事件的响应ID。
最简单的Ubuntu Touch & Android 双系统安装方式
在Nexus上实现Ubuntu和Android 4.4.2 双启动
Ubuntu 14.04 配置 Android SDK 开发环境
64位Ubuntu 11.10下Android开发环境的搭建(JDK+Eclipse+ADT+Android SDK详细)