自定义可以列表输入、点击内容的UiContentView
来源:互联网 发布:navicat连接rds数据库 编辑:程序博客网 时间:2024/05/24 07:29
/** * 自定义列表文本控件 * * @author sunxianpng * @E-mail 249980336@qq.com * @Version: V2.0 */public class UiContentView extends LinearLayout { /** * 文字的内容方向 */ public static final String UIContentView_LEFT = "1"; public static final String UIContentView_CENTER = "2"; public static final String UIContentView_FRGHT = "3"; private ImageView UiContent_TitleImg; private TextView UiContent_Title; private EditText UiContent_Input; private ImageView UiContent_ContentImg; public TextView getTvShow() { return UiContent_Title; } public EditText getContentView() { return UiContent_Input; } /** * true 能输入,false 反之 */ private Boolean inputFlag = false; /** * true 能点击,false 反之 */ private Boolean onClickFlag = true; /** * 内容点击事件 */ private OnContentClick mOnContentClick; public UiContentView(Context context, AttributeSet attrs) { super(context, attrs); iniWidgets(context, attrs); } public UiContentView(Context context) { super(context); iniWidgets(context, null); } @SuppressLint("NewApi") private void iniWidgets(Context context, AttributeSet attrs) { this.setOrientation(HORIZONTAL); this.setGravity(Gravity.CENTER_VERTICAL); this.setClickable(true); this.setFocusable(true); UiContent_TitleImg = new ImageView(context); UiContent_TitleImg.setPadding(0, 20, 20, 20); UiContent_ContentImg = new ImageView(context); UiContent_ContentImg.setPadding(20, 20, 0, 20); UiContent_Title = new TextView(context); UiContent_Title.setTextSize(TypedValue.COMPLEX_UNIT_SP, UIToolkit.middleFont()); UiContent_Title.setTextColor(0xff535353); UiContent_Title.setBackground(null); UiContent_Title.setSingleLine(false); UiContent_Title.setPadding(0, 20, 5, 20); UiContent_Title.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); UiContent_Input = new EditText(context); UiContent_Input.setTextSize(TypedValue.COMPLEX_UNIT_SP, UIToolkit.middleFont()); UiContent_Input.setTextColor(0xff535353); UiContent_Input.setBackground(null); UiContent_Input.setSingleLine(false); UiContent_Input.setPadding(0, 20, 5, 20); UiContent_Input.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL); LayoutParams titleImgParams = new LayoutParams( android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 0.2f); UiContent_TitleImg.setLayoutParams(titleImgParams); LayoutParams titleParams = new LayoutParams( android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.MATCH_PARENT, 1.1f); UiContent_Title.setLayoutParams(titleParams); LayoutParams contentParams = new LayoutParams( android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.MATCH_PARENT, 1); UiContent_Input.setLayoutParams(contentParams); LayoutParams contentImgParams = new LayoutParams( android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 0.3f); UiContent_ContentImg.setLayoutParams(contentImgParams); attachViewToParent(UiContent_TitleImg, 0, UiContent_TitleImg.getLayoutParams()); attachViewToParent(UiContent_Title, 1, UiContent_Title.getLayoutParams()); attachViewToParent(UiContent_Input, 2, UiContent_Input.getLayoutParams()); attachViewToParent(UiContent_ContentImg, 3, UiContent_ContentImg.getLayoutParams()); UiContent_TitleImg.setOnTouchListener(touchListener); UiContent_Title.setOnTouchListener(touchListener); UiContent_Input.setOnTouchListener(touchListener); UiContent_ContentImg.setOnTouchListener(touchListener); /** * FOCUS_BEFORE_DESCENDANTS ViewGroup本身先对焦点进行处理,如果没有处理则分发给child View进行处理 * FOCUS_AFTER_DESCENDANTS 先分发给Child View进行处理,如果所有的Child View都没有处理,则自己再处理 * FOCUS_BLOCK_DESCENDANTS ViewGroup本身进行处理,不管是否处理成功,都不会分发给ChildView进行处理 */ //setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); setValueAttributes(context, attrs); } private ContentTouchListener touchListener = new ContentTouchListener(); private class ContentTouchListener implements OnTouchListener{ @Override public boolean onTouch(View v, MotionEvent event) { if (UiContent_Input != null && mOnContentClick != null && onClickFlag && event.getAction() == MotionEvent.ACTION_DOWN) { mOnContentClick.onContentClick(UiContentView.this); } return false; } } /** * 设置控件资源属性 * * @param context * @param attrs */ private void setValueAttributes(Context context, AttributeSet attrs) { TypedArray ta = null; if (attrs != null) { try { ta = context.obtainStyledAttributes(attrs, R.styleable.UiContentView); /** * 默认的统一字体颜色 */ int TextColor = ta.getColor( R.styleable.UiContentView_uiContentUnifiedTextColor, 0); /** * title color */ int titleColor = ta.getColor( R.styleable.UiContentView_uiContentTitleColor, Color.BLACK); /** * 内容color */ int contentColor = ta.getColor( R.styleable.UiContentView_uiContentColor, Color.BLACK); /** * title text */ String titleText = ta .getString(R.styleable.UiContentView_uiContentTitleText); /** * 内容text */ String ContentText = ta .getString(R.styleable.UiContentView_uiContentText); /** * title 字体大小 */ float titleTextSize = ta.getDimension( R.styleable.UiContentView_uiContentTitleTextSize, 16); /** * 内容字体大小 */ float contextTextSize = ta.getDimension( R.styleable.UiContentView_uiContentTextSize, 16); /** * 是否可以点击的flag */ boolean clickFlag = ta.getBoolean( R.styleable.UiContentView_uiContentClickFlag, true); /** * 是否可以输入的flag */ boolean inputFlag = ta.getBoolean( R.styleable.UiContentView_uiContentInputFlag, false); /** * title是否显示 */ int titleVisibility = ta.getInt( R.styleable.UiContentView_uiContentTitleVisibility, 0); /** * 内容是否显示 */ int contextVisibility = ta.getInt( R.styleable.UiContentView_uiContentVisibility, 0); /** * 内容的输入提示信息 */ String contentHint = ta .getString(R.styleable.UiContentView_uiContentHint); /** * title 背景 */ int titleBack = ta .getResourceId( R.styleable.UiContentView_uiContentTitleBackgroundResource, android.R.color.transparent); /** * 内容背景 */ int contentBack = ta.getResourceId( R.styleable.UiContentView_uiContentBackgRoundResource, android.R.color.transparent); /** * 是否换行,默认换行 */ boolean isWrap = ta.getBoolean( R.styleable.UiContentView_uiContentTextIsWrap, true); /** * 内容的文字方向 */ String contentGravity = ta .getString(R.styleable.UiContentView_uiContentGravity); /** * 内容的文字方向 */ String titleGravity = ta .getString(R.styleable.UiContentView_uiContentTitleGravity); /** * title标识图标资源 */ int titleImgResource = ta .getResourceId( R.styleable.UiContentView_uiContentTitleImgBackgRoundResource, 0); /** * content标识图标资源 */ int contentImgResource = ta .getResourceId( R.styleable.UiContentView_uiContentImgBackgRoundResource, 0); /** * 动态设置title宽度 */ int titleWidth = (int) ta.getDimension( R.styleable.UiContentView_uiContentTitleWidth, 0); /** * 动态设置content宽度 */ int contentWidth = (int) ta.getDimension( R.styleable.UiContentView_uiContentWidth, 0); /** * 设置内容输入类型 */ int inputType = ta.getInt( R.styleable.UiContentView_uiContentInputType, 0); /** * 设置内容输入行数 */ int lines = ta.getInt(R.styleable.UiContentView_uiContentLines, 0); setContentLines(lines); /** * 最大长度 */ int maxLength = ta.getInt(R.styleable.UiContentView_uiContentLines, 0); setContentMaxLength(maxLength); switch (inputType) { case 1: setContentInputtype(InputType.TYPE_CLASS_NUMBER); break; case 2: setContentInputtype(InputType.TYPE_CLASS_PHONE); break; case 3: setContentInputtype(TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); break; case 4: setContentInputtype(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); break; case 5: setContentInputtype(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_NUMBER_FLAG_DECIMAL); break; case 6: setContentInputtype(TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD); break; default: break; } /** * 设置标题宽度 */ if (titleWidth != 0) { LayoutParams titleParams = (LayoutParams) UiContent_Title .getLayoutParams(); titleParams.width = titleWidth; UiContent_Title.setLayoutParams(titleParams); } /** * 设置内容宽度 */ if (contentWidth != 0) { LayoutParams contentParams = (LayoutParams) UiContent_Input .getLayoutParams(); contentParams.width = contentWidth; UiContent_Input.setLayoutParams(contentParams); } setTitleBackgroundResource(titleBack); setContentBackgroundResource(contentBack); setTitleImgResources(titleImgResource); setContentImgResources(contentImgResource); /** * 是否显示标题 */ switch (titleVisibility) { case 0: UiContent_Title.setVisibility(View.VISIBLE); break; case 1: UiContent_Title.setVisibility(View.INVISIBLE); break; case 2: UiContent_Title.setVisibility(View.GONE); break; default: break; } switch (contextVisibility) { case 0: UiContent_Input.setVisibility(View.VISIBLE); break; case 1: UiContent_Input.setVisibility(View.INVISIBLE); break; case 2: UiContent_Input.setVisibility(View.GONE); break; default: break; } /** * 设置提示语 */ if (contentHint != null) { setContentHint(contentHint); } setIsWarp(isWrap); setInputOnClickFlag(clickFlag); setInputFlag(inputFlag); /** * 设置字体颜色 */ if (TextColor != 0) { UiContent_Title.setTextColor(TextColor); UiContent_Input.setTextColor(TextColor); } else { UiContent_Title.setTextColor(titleColor); UiContent_Input.setTextColor(contentColor); } if (titleText != null) { UiContent_Title.setText(titleText); } else { UiContent_Title.setText(""); } if (ContentText != null) { UiContent_Input.setText(ContentText); } else { UiContent_Input.setText(""); } UiContent_Title.setTextSize(TypedValue.COMPLEX_UNIT_PX, titleTextSize); UiContent_Input.setTextSize(TypedValue.COMPLEX_UNIT_PX, contextTextSize); /** * 设置title文字方向 */ setTitleGravity(titleGravity); /** * 设置内容文字方向 */ setContentGravity(contentGravity); } catch (Exception e) { } finally { ta.recycle(); } } } /** * 设置内容文字的方向 * @param contentGravity */ public void setContentGravity(String contentGravity){ if (contentGravity != null && !contentGravity.equals("")) { if (contentGravity.equals("1")) { UiContent_Input.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); } else if (contentGravity.equals("2")) { UiContent_Input.setGravity(Gravity.CENTER | Gravity.CENTER_VERTICAL); } else if (contentGravity.equals("3")) { UiContent_Input.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL); } } } /** * 设置内容文字的方向 * @param titleGravity */ public void setTitleGravity(String titleGravity){ if (titleGravity != null && !titleGravity.equals("")) { if (titleGravity.equals("1")) { UiContent_Title.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); } else if (titleGravity.equals("2")) { UiContent_Title.setGravity(Gravity.CENTER | Gravity.CENTER_VERTICAL); } else if (titleGravity.equals("3")) { UiContent_Title.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL); } } } /** * 最大长度 */ public void setContentMaxLength(int length) { if (length != 0) { UiContent_Input.setFilters(new InputFilter[]{new InputFilter.LengthFilter(length)}); } } /** * 内容行数 */ public void setContentLines(int lines) { if (lines != 0) { UiContent_Input.setLines(lines); } } /** * 监听用户输入信息 * * @param textWatcher */ public void setTextWatcher(TextWatcher textWatcher) { if (textWatcher != null) { UiContent_Input.addTextChangedListener(textWatcher); } } /** * 获取焦点状态 * * @param onFocusChangeListener */ public void setOnContentFocusChangeListener(OnFocusChangeListener onFocusChangeListener) { UiContent_Input.setOnFocusChangeListener(onFocusChangeListener); } /** * title背景 */ public void setTitleBackgroundResource(int resid) { UiContent_Title.setBackgroundResource(resid); } /** * 设置内容背景 */ public void setContentBackgroundResource(int resid) { UiContent_Input.setBackgroundResource(resid); } /** * 设置title */ public void setTitleVaule(String str) { UiContent_Title.setText(str); } /** * 返回title 的内容 */ public String getTitleVaule() { String str = UiContent_Title.getText().toString().trim(); if (str != null) { return str; } else { return ""; } } public void setContentVaule(String inputStr) { UiContent_Input.setText(inputStr); } public void setContentVaule(Spanned inputStr) { UiContent_Input.setText(inputStr); } public String getContentVaule() { String str = UiContent_Input.getText().toString().trim(); if (str != null) { return str; } else { return ""; } } /** * 设置edittext 是否能点击 */ public void setInputOnClickFlag(Boolean mOnClickFlag) { this.onClickFlag = mOnClickFlag; if (onClickFlag) { UiContent_Input.setFocusable(true); UiContent_Input.setFocusableInTouchMode(true); } else { UiContent_Input.setFocusable(false); UiContent_Input.setFocusableInTouchMode(false); } } /** * 用于设置edittext 是否能输入 */ public void setInputFlag(Boolean mInputFlag) { this.inputFlag = mInputFlag; if (inputFlag) { setIsWarp(true); } else { UiContent_Input.setInputType(InputType.TYPE_NULL); UiContent_Input.setSingleLine(false); UiContent_Input.setHorizontallyScrolling(false); } } public Boolean iSInputFlag() { return inputFlag; } public Boolean isClickFlag() { return onClickFlag; } public void setOnContentClick(OnContentClick onContentClick) { mOnContentClick = onContentClick; } public interface OnContentClick { void onContentClick(View v); } /** * 设置是否可以换行 * * @param isWrap */ public void setIsWarp(Boolean isWrap) { if (isWrap) { /** * 文本显示位置 */ UiContent_Input.setGravity(Gravity.CENTER_VERTICAL); /** * 改变默认的单行显示 */ UiContent_Input.setSingleLine(false); /** * 水平滑动设置为false */ UiContent_Input.setHorizontallyScrolling(false); } } /** * 设置提示信息 */ public void setContentHint(String contentHint) { if (contentHint != null) { UiContent_Input.setHint(contentHint); } else { UiContent_Input.setHint(""); } } /** * 设置输入类型 * * @param type */ public void setContentInputtype(int type) { UiContent_Input.setInputType(type); } /** * 设置文本方向 * * @param gravity */ public void setContentGravity(int gravity) { UiContent_Input.setGravity(gravity); } /** * 设置title图标资源 * * @param res */ public void setTitleImgResources(int res) { if (res != 0) { UiContent_TitleImg.setVisibility(View.VISIBLE); UiContent_TitleImg.setImageResource(res); } else { UiContent_TitleImg.setVisibility(View.GONE); } } /** * 设置内容标示的图标资源 * * @param res */ public void setContentImgResources(int res) { if (res != 0) { UiContent_ContentImg.setVisibility(View.VISIBLE); UiContent_ContentImg.setImageResource(res); } else { UiContent_ContentImg.setVisibility(View.GONE); } } public void setContentImgBitmap(Bitmap bitmap) { if (bitmap != null) { UiContent_ContentImg.setVisibility(View.VISIBLE); UiContent_ContentImg.setImageBitmap(bitmap); } else { UiContent_ContentImg.setVisibility(View.GONE); } } /** * 设置输入内容类型 * @param contentInputType */ public void setContentKeyListen(String contentInputType){ UiContent_Input.setKeyListener(DigitsKeyListener.getInstance(contentInputType)); } /** * 设置只能输入的类型 * InputFilter[] filters = {new CashierInputFilter()}; * @param inputFilters */ public void setContentFilers(InputFilter [] inputFilters){ UiContent_Input.setFilters(inputFilters); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return super.onInterceptTouchEvent(ev); }}
其中的attrs 文件中包含自定义方法
<!-- ********************************* 公用 UiContentView Attrs ********************************* --><declare-styleable name="UiContentView"> <!-- 设置统一文字颜色 --> <attr name="uiContentUnifiedTextColor" format="reference|color" /> <!-- 设置title文字颜色 --> <attr name="uiContentTitleColor" format="reference|color" /> <!-- 设置内容背景颜色 --> <attr name="uiContentColor" format="reference|color" /> <!-- 设置title 的文字 --> <attr name="uiContentTitleText" format="reference|string" /> <!-- 设置内容的文字 --> <attr name="uiContentText" format="reference|string" /> <!-- 设置title字体大小 --> <attr name="uiContentTitleTextSize" format="reference|dimension" /> <!-- 设置内容字体大小 --> <attr name="uiContentTextSize" format="reference|dimension" /> <!-- 设置是否内容可以输入 --> <attr name="uiContentInputFlag" format="reference|boolean" /> <!-- 设置内容提示信息 --> <attr name="uiContentHint" format="reference|string" /> <!-- 设置内容是否可以点击 --> <attr name="uiContentClickFlag" format="reference|boolean" /> <!-- 设置title的背景资源 --> <attr name="uiContentTitleBackgroundResource" format="reference|color" /> <!-- 设置控件的整体背景资源 --> <attr name="uiContentBackgRoundResource" format="reference|color" /> <!-- 设置控件title标示图标资源 --> <attr name="uiContentTitleImgBackgRoundResource" format="reference" /> <!-- 设置控件content标示图标资源 --> <attr name="uiContentImgBackgRoundResource" format="reference" /> <!-- 设置控件title宽度 --> <attr name="uiContentTitleWidth" format="reference|dimension" /> <!-- 设置控件content宽度 --> <attr name="uiContentWidth" format="reference|dimension" /> <!-- 设置是否换行 --> <attr name="uiContentTextIsWrap" format="boolean" /> <!-- 设置是否显示title --> <attr name="uiContentTitleVisibility"> <enum name="visibility" value="0" /> <enum name="invisible" value="1" /> <enum name="gone" value="2" /> </attr> <!-- 设置是否显示内容 --> <attr name="uiContentVisibility"> <enum name="visibility" value="0" /> <enum name="invisible" value="1" /> <enum name="gone" value="2" /> </attr> <!-- 设置内容位置 --> <attr name="uiContentGravity"> <enum name="left" value="1" /> <enum name="center" value="2" /> <enum name="right" value="3" /> </attr> <!-- 设置title位置 --> <attr name="uiContentTitleGravity"> <enum name="left" value="1" /> <enum name="center" value="2" /> <enum name="right" value="3" /> </attr> <!-- 设置内容输入类型 --> <attr name="uiContentInputType"> <flag name="amount" value="1" /> <flag name="phone" value="2" /> <flag name="email" value="3" /> <flag name="decimal" value="4" /> <flag name="signedDecimal" value="5" /> <flag name="password" value="6" /> </attr> <!-- 内容可以显示的行数 --> <attr name="uiContentLines" format="reference|integer" /> <!-- 最大输入数量 --> <attr name="uiContentMaxLength" format="reference|integer" /></declare-styleable><!-- ********************************* 公用 UiContentView End ********************************* -->
阅读全文
0 0
- 自定义可以列表输入、点击内容的UiContentView
- html 中可以自定义输入的 select 下拉列表
- ExpandableListView 根据输入的名称搜索对应的内容并展示,点击可打开二级列表
- 文本框里显示提示语言,点击可以输入其他内容
- 带输入框的自定义dialog 点击外部消失 输入框可以弹出软键盘 去除外部黑框
- 可以输入的网页列表框
- StringComboBoxCellEditor 可以输入列表以外的值
- 可以输入内容的下拉菜单
- 关于自定义可以点击的的布局
- android 实现edittext输入内容后可以点击右侧小图片进行清除内容
- 复合组件(EditText输入内容,显示图片,点击图片删除输入内容,点击button弹出输入的内容)
- jQuery输入框点击添加在下面列表显示可以进行删除
- input禁止输入,可以点击
- 自定义控件--自定义内容可以滚动的TextView
- 点击列表中点评进度,可以在列表中显示新的列表框
- Android自定义可长按逐个删除输入内容的输入框
- 仿微信点击回复,输入框定位到列表的底部
- 设置EditText的输入内容,并处理重复点击事件
- light oj 1067Combinations
- Linux驱动笔记:SPI驱动
- hdu5521
- Android四大组件之广播
- 偏差(Bias)与方差(Variance)
- 自定义可以列表输入、点击内容的UiContentView
- android布局
- Exponentiation 【java 处理高精度】
- javaScript--跳转页面
- 【每日一题-1】有序链表合并与累加和问题
- 减少OpenCV读取高分辨率图像的时间
- 高效跟踪文献,不可不知的10种方法
- Java流程结构
- 特征缩放