自定义 既可输入文字又可选择的 控件ComBox

package com.zxf.testmycombox;


import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;




/**自定义可输入可选择的控件**/
@SuppressLint("InflateParams")
public class ComboBox extends LinearLayout {



private final static String TAG = "ComboBox";
    
private ListViewItemClickListenerm_listener;

    private Viewm_view;
    private ListView m_listView;
    private PopupWindow m_popupwindow;
    private ListViewAdapter m_adapter_listview;
private String[]m_data; 
private Contextm_context;
private Button          m_Button;
private EditText        m_EditText;
    
public ComboBox(Context context) {
super(context);
m_context = context;
init();

}

public ComboBox(Context context, AttributeSet attrs) {
super(context, attrs);
m_context = context;
init();
}

private void init(){
View newView = LayoutInflater.from(m_context).inflate(R.layout.test, this, true);
m_Button = (Button) newView.findViewById(R.id.comboButton);
m_EditText = (EditText) newView.findViewById(R.id.comboEditText);


m_adapter_listview = new ListViewAdapter(m_context);
    m_view = LayoutInflater.from(m_context).inflate(R.layout.combobox_listview, null);
   
    m_listView =  (ListView)m_view.findViewById(R.id.id_listview);
    m_listView.setAdapter(m_adapter_listview);
    m_listView.setClickable(true);
    m_listView.setOnItemClickListener(new OnItemClickListener() {
   
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
m_popupwindow.dismiss();
m_EditText.setText(m_data[position]);//选择的条目信息

if (m_listener != null){
m_listener.onItemClick(position);
}
}
});
   
    setListeners();
}

public void setData(String[] data){
if (null == data || data.length <= 0){
return ;
}

m_data = data;
//m_EditText.setText(data[0]);
}

public void setListViewOnClickListener(ListViewItemClickListener listener){
m_listener = listener;
}

private void setListeners() {
m_Button.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});

m_Button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {

Log.d(TAG, "Click......");
if(m_popupwindow == null){
m_popupwindow = new PopupWindow(m_view, ComboBox.this.getWidth(), 400);//LayoutParams.WRAP_CONTENT);
     
                //点击PopUpWindow外面的控件也可以使得PopUpWindow dimiss。
                //需要顺利让PopUpWindow dimiss;PopUpWindow的背景不能为空。
m_popupwindow.setBackgroundDrawable(new BitmapDrawable());
 
//获得焦点,并且在调用setFocusable(true)方法后,可以通过Back(返回)菜单使PopUpWindow dimiss
                //pop.setFocusable(true)
m_popupwindow.setFocusable(true);  
m_popupwindow.setOutsideTouchable(true);
m_popupwindow.showAsDropDown(ComboBox.this, 0, 0);
 
}else if(m_popupwindow.isShowing()){
               m_popupwindow.dismiss();
}else{
               m_popupwindow.showAsDropDown(ComboBox.this);
}
}

});
}

class ListViewAdapter extends BaseAdapter {
        private LayoutInflater m_inflate;
        
        public ListViewAdapter(Context context) {        
            // TODO Auto-generated constructor stub
        m_inflate = LayoutInflater.from(context);
        }


        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return m_data == null ? 0 : m_data.length;
        }


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


        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
        
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
            TextView textview = null;
            
            if(convertView==null){
                convertView= m_inflate.inflate(R.layout.combobox_item, null);
                textview = (TextView)convertView.findViewById(R.id.id_txt);
                
                convertView.setTag(textview);
            }else{
            textview = (TextView) convertView.getTag();
            }
            
            textview.setText(m_data[position]);
             
            return convertView;
}
    }

public String getText(){
return m_EditText.getText().toString();
}

public interface ListViewItemClickListener{
void onItemClick(int position);
}
}

版权声明:本文为u013758456原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。