如何为标准控件添加自定义属性
1个回答
展开全部
自定义控件中自定义属性的定义和使用方式。
第一步当然是自定义类EditTextNoEmoji继承EditText,同时重写三个构造方法。这里需要注意的是,三个构造方法中必须分别实现父类对应的构造方法,就是三个super();而不能出现调用当前类的不同参数的另一个构造方法的形式,就是不能出现this()。否则的话,这个控件在实际使用时是获得不到焦点的,似乎是由于EditText继承TextView的原因,具体原因待查。
谈谈这三个构造方法的区别,一参的构造EditTextNoEmoji(Context context),是在使用的java文件中动态生成时调用,两参的构造EditTextNoEmoji(Context context, AttributeSet attrs),是在使用的xml文件中静态生成时调用,三参的构造基本不会使用,暂且不讨论。而两参构造中的第二个参数attrs,正是我们要自定义的属性,所以在该方法中调用setAttrs(context, attrs)设置xml文件中使用到的自定义属性。
第二步需要声明自定义属性控制是否禁止输入表情,同时为了方便该控件在使用时的xml布局中配置该属性,要先在res/values/styles.xml中自定义属性名称。自定义属性的styleable名称必须是和自定义控件的类名保持一致的,在这个样式下可以添加任意的自定义属性,如下代码,添加了一个boolean类型的属性,名称为canInputEmoji。另外可以添加的属性类型包括 color,boolean,dimension,enum,flag,float,fraction,integer,reference,string等十种。
第一步当然是自定义类EditTextNoEmoji继承EditText,同时重写三个构造方法。这里需要注意的是,三个构造方法中必须分别实现父类对应的构造方法,就是三个super();而不能出现调用当前类的不同参数的另一个构造方法的形式,就是不能出现this()。否则的话,这个控件在实际使用时是获得不到焦点的,似乎是由于EditText继承TextView的原因,具体原因待查。
谈谈这三个构造方法的区别,一参的构造EditTextNoEmoji(Context context),是在使用的java文件中动态生成时调用,两参的构造EditTextNoEmoji(Context context, AttributeSet attrs),是在使用的xml文件中静态生成时调用,三参的构造基本不会使用,暂且不讨论。而两参构造中的第二个参数attrs,正是我们要自定义的属性,所以在该方法中调用setAttrs(context, attrs)设置xml文件中使用到的自定义属性。
第二步需要声明自定义属性控制是否禁止输入表情,同时为了方便该控件在使用时的xml布局中配置该属性,要先在res/values/styles.xml中自定义属性名称。自定义属性的styleable名称必须是和自定义控件的类名保持一致的,在这个样式下可以添加任意的自定义属性,如下代码,添加了一个boolean类型的属性,名称为canInputEmoji。另外可以添加的属性类型包括 color,boolean,dimension,enum,flag,float,fraction,integer,reference,string等十种。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询