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);
}
}
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版权协议,转载请附上原文出处链接和本声明。