现EditText + PopupWindow来实现搜索的功能

package com.item.demo;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.text.Editable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextWatcher;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.LinearLayout.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;

/**
 * EditText的一个Demo 实现EditText + PopupWindow来实现搜索的功能
 * 
 * @author Administrator
 * 
 */
public class MainActivity extends Activity {
    private PopupWindow popupWindow;
    private ListView lView;
    private MyAdapter adapter;
    private EditText edtText;
    private List<String> list = new ArrayList<String>();
    private List<SpannableString> carNumber = new ArrayList<SpannableString>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edtText = (EditText) findViewById(R.id.edt_hello);
        initData();
        adapter = new MyAdapter(this, carNumber);
        edtText.addTextChangedListener(new TextWatcher() {
            
            @Override
            public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) {
                // TODO Auto-generated method stub
                if(s.length() > 0){
                    if(popupWindow == null){
                        View contentView = View.inflate(MainActivity.this, R.layout.item_list, null);
                        lView = (ListView)contentView.findViewById(R.id.item_list);
                        popupWindow = new PopupWindow(contentView,edtText.getWidth(),LayoutParams.WRAP_CONTENT,true);
                    }
                    carNumber.clear();
                    for(String str : list){
                        if(str.startsWith("" + s)){
                            SpannableString ss = new SpannableString(str);
                            ss.setSpan(new ForegroundColorSpan(Color.BLUE), 0, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                            carNumber.add(ss);
                        }
                    }
                    if(carNumber.size() == 0){
                        SpannableString ssString = new SpannableString("无该银行");
                        ssString.setSpan(new ForegroundColorSpan(Color.RED), 0, ssString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                        carNumber.add(ssString);
                    }
                    adapter.notifyDataSetChanged();
                    lView.setAdapter(adapter);
                    popupWindow.setOutsideTouchable(true);
                    popupWindow.setFocusable(false);
                    popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                    popupWindow.showAsDropDown(edtText, 0, 0);
                    if(carNumber.size() >=5){
                        popupWindow.update(edtText.getWidth(), 250);
                    }else {
                        popupWindow.update(edtText.getWidth(), LayoutParams.WRAP_CONTENT);
                    }
                    lView.setOnItemClickListener(new OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView<?> arg0, View arg1,
                                int arg2, long arg3) {
                            // TODO Auto-generated method stub
                            edtText.setText(carNumber.get(arg2).toString());
                            if(popupWindow !=null && popupWindow.isShowing()){
                                popupWindow.dismiss();
                            }
                        }
                    });
                }
            }
            
            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {
                // TODO Auto-generated method stub
                
            }
            
            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
                
            }
        });
    }
    /**
     * 模拟数据
     */
    private void initData(){
        for (int i = 0; i < 5; i++) {
            ListBean bean = new ListBean("中国建设银行");
            list.add(bean);
        }
    }
    /**
     * 适配器
     * @author Administrator
     *
     */
    private class MyAdapter extends BaseAdapter{
        private Context context;
        private List<SpannableString> carList;
        
        public MyAdapter(Context context, List<SpannableString> carList) {
            super();
            this.context = context;
            this.carList = carList;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return carList.size();
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int arg0, View arg1, ViewGroup arg2) {
            // TODO Auto-generated method stub
            ViewHoler holer = null;
            if(arg1 == null) {
                holer = new ViewHoler();
                arg1 = View.inflate(context, R.layout.item_adpter, null);
                holer.tv_name = (TextView)arg1.findViewById(R.id.item_carnum);
                arg1.setTag(holer);
            }else {
                holer = (ViewHoler)arg1.getTag();
            }
            holer.tv_name.setText(carList.get(arg0));
            return arg1;
        }
        class ViewHoler{
            private TextView tv_name;
        }
    }

}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值