设为首页 加入收藏

TOP

Android之搜索框的纯代码实现(二)
2014-11-23 17:50:28 来源: 作者: 【 】 浏览:122
Tags:Android 搜索 代码 实现
rawablesWithIntrinsicBounds(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。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇在Android迷你广告上添加浮动的关.. 下一篇C语言实现时间片轮转法的cpu调度..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: