自定义控件>带下拉框的文本框 (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
- 自定义控件>带下拉框的文本框 (DropEditView)
- 带下拉框的文本框
- 带下拉框的input文本框
- javascript实现的一个带下拉框功能的文本框
- samrtselect——将 下拉列表控件 转变成可以智能提示、带下拉的文本框
- 自定义带下拉刷新的ListView
- 自定义带下拉刷新和滚动加载的ListView控件原理分析和实现
- PullToRefreshGridView 带下拉刷新,上拉加载的GridView控件
- 带下拉提示的输入框
- html5带下拉框的input
- 带下拉列表的输入框
- 带下拉框的动态折线图表
- 带下拉刷新 和 划动自动加载的控件
- android系统自带下拉刷新控件的实现
- android系统自带下拉刷新控件的实现
- flex自定义自带下拉查询功能的textinput
- android自定义带下拉刷新和Checkbox的ListView
- 带下拉列表的table
- relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared objec
- Number of Digit One -- leetcode
- 判读平年还是闰年
- NIO——Channel
- 跳转到网站 --- UIWebview的基本使用
- 自定义控件>带下拉框的文本框 (DropEditView)
- JSONP安全防范解决方案新思路
- 容器布局动画 LayoutTransition(动画之添加按钮)
- dsoframer控件-jsp在线编辑offic文档
- 我是如何自学android,资料分享2015版
- 约瑟夫问题
- JAVA中的 JSON 解析
- Linux常用命令
- jQuery.Callbacks之demo