Android之搜索框的纯代码实现(2)

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。

Android 4.4.4 发布下载

最简单的Ubuntu Touch & Android 双系统安装方式

在Nexus上实现Ubuntu和Android 4.4.2 双启动

Ubuntu 14.04 配置 Android SDK 开发环境

64位Ubuntu 11.10下Android开发环境的搭建(JDK+Eclipse+ADT+Android SDK详细)

Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法

Ubuntu 12.10 x64 安装 Android SDK

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/81fcfffb8d77c8a495d12095146aa73b.html