自定义控件>带下拉框的文本框 (DropEditView)

来源:互联网 发布:大话数据库 编辑:程序博客网 时间:2024/05/12 19:47
package xxx.view;import android.content.Context;import android.graphics.Color;import android.graphics.drawable.BitmapDrawable;import android.inputmethodservice.Keyboard;import android.text.TextWatcher;import android.util.AttributeSet;import android.util.Log;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.EditText;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.PopupWindow;import android.widget.ScrollView;import xxx.R;import xxx.keyboard.KeyBoardUtils;import xxx.string.DensityUtils;/** * Created by xlzhen on 6/25 0025. * 仿spinner控件,可实现edit_text旁的图片变化和下拉列表item的深度定制 */public class DropEditView extends LinearLayout {    private EditText editText;    private TextColorButton colorButton;    private Context context;    private ScrollView scrollView;    private ImageView imageView;    private LinearLayout linearLayout_Top, linearLayout_Bottom;    private int position;    private PopupWindow popupWindow;    private static int edit_width = 40;    private int offset_left=5;    private int popup_height = ViewGroup.LayoutParams.WRAP_CONTENT;    /*    * 实例化dropeditview(新增edit_text,scroview)    *    */    public DropEditView(Context context,int margin) {        super(context);        setOrientation(VERTICAL);        this.context = context;        position = 0;        linearLayout_Top = new LinearLayout(context);        linearLayout_Top.setOrientation(HORIZONTAL);        linearLayout_Top.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT                , ViewGroup.LayoutParams.WRAP_CONTENT));        editText = new EditText(context);        editText.setFocusable(false);        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DensityUtils.dp2px(edit_width, context));        layoutParams.setMargins(DensityUtils.dp2px(margin, context), DensityUtils.dp2px(margin, context)                , DensityUtils.dp2px(margin, context), DensityUtils.dp2px(margin, context));        editText.setLayoutParams(layoutParams);        editText.setGravity(Gravity.CENTER);        editText.setTextSize(15f);        editText.setHintTextColor(getResources().getColor(R.color.shangjia_biaoqian_grid_color));        editText.setBackgroundResource(R.drawable.edit_text_layout);        editText.setClickable(true);        editText.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                setShowPopup(popup_height);            }        });        linearLayout_Top.addView(editText);        scrollView = new ScrollView(context);        scrollView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));        linearLayout_Bottom = new LinearLayout(context);        linearLayout_Bottom.setOrientation(VERTICAL);        linearLayout_Bottom.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT                , ViewGroup.LayoutParams.MATCH_PARENT));        scrollView.addView(linearLayout_Bottom);        addView(linearLayout_Top);    }    public DropEditView(Context context, AttributeSet attrs) {        super(context, attrs);        setOrientation(VERTICAL);        this.context = context;        position = 0;        linearLayout_Top = new LinearLayout(context);        linearLayout_Top.setOrientation(HORIZONTAL);        linearLayout_Top.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT                , ViewGroup.LayoutParams.WRAP_CONTENT));        editText = new EditText(context);        editText.setFocusable(false);        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DensityUtils.dp2px(edit_width, context), 1.0f);        layoutParams.setMargins(DensityUtils.dp2px(5, context), DensityUtils.dp2px(10, context)                , DensityUtils.dp2px(10, context), DensityUtils.dp2px(10, context));        editText.setLayoutParams(layoutParams);        editText.setGravity(Gravity.CENTER);        editText.setTextSize(15f);        editText.setHintTextColor(getResources().getColor(R.color.shangjia_biaoqian_grid_color));        editText.setBackgroundResource(R.drawable.edit_text_layout);        editText.setClickable(true);        editText.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                setShowPopup(popup_height);            }        });        linearLayout_Top.addView(editText);        scrollView = new ScrollView(context);        scrollView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));        linearLayout_Bottom = new LinearLayout(context);        linearLayout_Bottom.setOrientation(VERTICAL);        linearLayout_Bottom.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT                , ViewGroup.LayoutParams.MATCH_PARENT));        scrollView.addView(linearLayout_Bottom);        addView(linearLayout_Top);    }    public void setPopup_height(int popup_height) {        this.popup_height = DensityUtils.dp2px(popup_height, context);    }    private void setShowPopup(int popup_height) {        if (popupWindow == null) {            popupWindow = new PopupWindow(scrollView, editText.getWidth() - DensityUtils.dp2px(offset_left-10,context), popup_height);            popupWindow.setBackgroundDrawable(new BitmapDrawable());            popupWindow.setOutsideTouchable(true);            popupWindow.setFocusable(true);            popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {                @Override                public void onDismiss() {                    if (imageView != null) {                        imageView.setBackgroundResource(R.mipmap.me_btn_cbb);                    }                }            });        }        if (imageView != null) {            imageView.setBackgroundResource(R.mipmap.me_btn_cbb_pre);        }        KeyBoardUtils.closeKeybord(editText, editText.getContext());        popupWindow.showAsDropDown(editText);    }    /*        * 如果需要edit_text旁边加图片,则set该项        *        * */    public void setRightImageView(int offset_left,int margin) {        this.offset_left=Math.abs(offset_left);        if (imageView == null) {            if (scrollView != null) {                LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT                        , LayoutParams.MATCH_PARENT);                layoutParams.setMargins(0, 0, DensityUtils.dp2px(edit_width, context), 0);                scrollView.setBackgroundColor(Color.WHITE);                scrollView.setLayoutParams(layoutParams);            }            imageView = new ImageView(context);            LayoutParams layoutParams = new LayoutParams(DensityUtils.dp2px(edit_width, context)                    , DensityUtils.dp2px(edit_width, context));            layoutParams.setMargins(DensityUtils.dp2px(offset_left, context), DensityUtils.dp2px(margin, context)                    , DensityUtils.dp2px(margin, context), DensityUtils.dp2px(margin, context));            imageView.setLayoutParams(layoutParams);            imageView.setClickable(true);            imageView.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    setShowPopup(popup_height);                }            });            imageView.setBackgroundResource(R.mipmap.me_btn_cbb);            if (linearLayout_Top != null) {                linearLayout_Top.addView(imageView);            }        }    }    /*    * 添加textcolorbutton到scroview    * */    public void addColorButton(final String text, int text_select_color, int text_unselect_color, final int position) {        colorButton = new TextColorButton(context);        colorButton.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT                , ViewGroup.LayoutParams.WRAP_CONTENT));        colorButton.setText(text);        colorButton.setTextColorChanged(text_select_color, text_unselect_color);        colorButton.setButtonLayout();        colorButton.setTextLayout();        colorButton.setBackgroundResource(R.drawable.dropdown_layout);        colorButton.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                popupWindow.dismiss();                if (imageView != null) {                    imageView.setBackgroundResource(R.mipmap.me_btn_cbb);                }                DropEditView.this.setEditText(text);                DropEditView.this.position = position;            }        });        linearLayout_Bottom.addView(colorButton);    }    /*    * 写入edittext    * */    public void setEditText(String text) {        if (editText != null) {            editText.setText(text);        }    }    /*    * 更改文本后更新    * */    public void setTextChanged(TextWatcher textChanged) {        editText.addTextChangedListener(textChanged);    }    /*    * 读取edit_text,返回的是下拉列表的position    * */    public int getEditPosition() {        return position+1;    }    /*        * 读取edit_text,返回的是String        * */    public String getEditText() {        return editText.getText().toString();    }    /*    * 设置edit不可写入    * */    public void setEditTextable() {        editText.setFocusable(false);        editText.setFocusableInTouchMode(false);    }    public void clearButton() {        linearLayout_Bottom.removeAllViews();    }}
                                             
0 0