自定义可以列表输入、点击内容的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
原创粉丝点击