美文网首页
InputLayout

InputLayout

作者: AnnaLeeYY | 来源:发表于2017-03-27 23:44 被阅读0次

    输入框布局

    在涉及注册登录等逻辑,往往会有输入框布局,不同的项目往往UI样式区别非常大,例如如下几种

    Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png

    总结起来就是, UI样式千变万化, 但是功能上,都是包含输入框 和 功能按钮, 一般输入框只有一个, 但是功能按不止有一个, 功能上只有,切换密码可见性、清空功能;

    第一次思考

    我本打算做 许多UI模板,然后用布局工厂去造出来不同的布局, 这样就能适用于实际开发场景,但是问题来了,每写一种Ui,都要在工厂里面配置一次,这样还是非常不好的。

    第二次思考

    我记得子View使用的属性,可以来于父控件的 LayoutParams 所以我们可以写一个自定义的相对布局、帧布局、线性布局去替换系统的,那么问题又来了, 相同的代码,我们需要写3次,所以我们需要引入一些设计模式;

    先看用法

    Paste_Image.png

    InputRelativeLayout

    public class InputRelativeLayout extends RelativeLayout {
        private InputLayoutHelper inputLayoutHelper;
    
        public InputRelativeLayout(Context context) {
            super(context);
            initView();
        }
    
        public InputRelativeLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
            initView();
        }
    
        private void initView() {
            setTag("ignore");
            inputLayoutHelper = new InputLayoutHelper();
        }
    
        @Override
        protected void onFinishInflate() {
            super.onFinishInflate();
            inputLayoutHelper.onFinishInflate(this);
        }
    
        public static class LayoutParams extends RelativeLayout.LayoutParams implements IParamsProxy {
            private ParamsProxy paramsProxy;
    
            public LayoutParams(Context context, AttributeSet attrs) {
                super(context, attrs);
                paramsProxy = new ParamsProxy().obtainStyledAttributes(context, attrs);
            }
    
            @Override
            public IParams getInputParams() {
                return paramsProxy;
            }
        }
    
        @Override
        public RelativeLayout.LayoutParams generateLayoutParams(AttributeSet attrs) {
            return new LayoutParams(getContext(), attrs);
        }
    
    }
    

    源码 InputLayout

    相关文章

      网友评论

          本文标题:InputLayout

          本文链接:https://www.haomeiwen.com/subject/flydottx.html