设为首页 加入收藏

TOP

Android之搜索框的纯代码实现(一)
2014-11-23 17:50:28 】 浏览:710
Tags:Android 搜索 代码 实现

方式一:使用XML和JAVA代码相结合的方式。在XML中定义搜索的相关控件及布局,JAVA代码中进行相应事件的控制。


方式二:对于浮动搜索框,可以使用SearchRecentSuggestionsProvider和searchable来实现。


方式三:全部使用JAVA代码实现。


前面两种,网上的代码已经很多,这里使用方式三来实现。先来看看效果图。


Android之搜索框的纯代码实现Android之搜索框的纯代码实现


功能:


(1)、搜索框中有提示。


(2)、输入内容后,提示自动清除,显示输入的内容,并在右边显示清空的图标。


(3)、点击搜索按钮后,将搜索结果输出。


依据这些功能,我们可以作如下分解。


(1)、输入框、清空图标、搜索按钮在同一水平线上,所以可以需要使用LinearLayout的水平布局来实现。


(2)、输入框可以使用EditText实现。


(3)、输入框的提示内容使用EditText的hint实现。


(4)、清空图标可以在EditText中绘制一个靠右的图标,并设定一定的感应区,以响应清空操作。


(5)、搜索按钮使用Button添加图片实现,同时添加点击事件的响应。


(6)、为了确保按钮外的空间被输入框占满,需要使用比重layout_weight=1来设置。


通过分解,大致可以理出需要用到的控件和相应的逻辑,下面是实现的代码。


SearchWidget.java


package com.example.searchframetest;


import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.InputType;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;


public class SearchWidget extends LinearLayout {


public final static int SEARCH_ID = 0x7ff20001;
public final static String HINT_NAME = "hint";


private EditText _data_editText = null;
private Button _search_button = null;
private Context _context = null;
private Drawable _clear_drawable = null;
private Drawable _search_drawable = null;
private Resources _res = null;
private AttributeSet _attrs = null;
private String _hint = "";


public SearchWidget(Context context, AttributeSet attrs) {
super(context, attrs);
if (context == null) {
return;
}
_context = context;
_attrs = attrs;
Init();
}


private void Init() {
InitParams();
InitAttrs();
InitControls();
InitLayout();
BindingEvents();
}


private void InitLayout() {
this.setOrientation(LinearLayout.HORIZONTAL);
}


private void InitParams() {
_res = _context.getResources();
_clear_drawable = _res.getDrawable(R.drawable.clear);
_search_drawable = _res.getDrawable(R.drawable.search);


}


private void InitAttrs() {
for (int i = 0; i < _attrs.getAttributeCount(); i++) {
if (_attrs.getAttributeName(i).equals(HINT_NAME)) {
_hint = _attrs.getAttributeva lue(i);
break;
}
}
}


private void InitControls() {
_data_editText = new EditText(_context);
_search_button = new Button(_context);


LayoutParams dataLayoutParams = new LayoutParams(0,
LayoutParams.FILL_PARENT, 1);
_data_editText.setLayoutParams(dataLayoutParams);


_search_button.setCompoundDrawablesWithIntrinsicBounds(null, null,
_search_drawable, null);


_search_button.setId(SEARCH_ID);


this.addView(_data_editText);
this.addView(_search_button);
// addHint();
_data_editText.setHint(_hint);
// _data_editText.setFocusable(false);
}


private void BindingEvents() {


_data_editText.addTextChangedListener(_search_TextChanged);
_data_editText.setOnTouchListener(_search_OnTouch);
}


public void setSearchOnClickListener(OnClickListener onclickListener) {


_search_button.setOnClickListener(onclickListener);
}


public String getSearchData() {


return _data_editText.getText().toString();
}


private TextWatcher _search_TextChanged = new TextWatcher() {


@Override
public void afterTextChanged(Editable s) {


Editable data = s;


if (TextUtils.isEmpty(data)) {
_data_editText.setCompoundD

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

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目