自定义组合控件
注:在组合控件中,子控件可能会抢夺焦点,Button,EditView,CheckBox等,选在在子或父添加属性
- 父节点: android:descendantFocusability=”blocksDescendants”属性
子节点: android:clickable=”false”(待定), android:focusable=”false”属性.
- 需求 : 将组合界面的条目抽取为一个控件
实现 :
- 把要抽取的部分单独放在一个布局文件当中
- 定义一个Java类, 继承抽取出来的布局文件中的根节点, 同时实现两个构造函数SettingsItemView(Context context)和SettingsItemView(Context context, AttributeSet attrs),第一个调用第二个
- 在SettingsItemView(Context context, AttributeSet attrs)中加载布局文件.
- 为控件指定自定义属性. 例如: 我们的这个控件,背景有三种, 内部的文本也不同, 而且有的有开关,有的没有开关. 可参考系统控件属性的定义方法来为我们的控件定义属性( android-sdk\platforms\android-23\data\res\values\attrs.xml ),格式为:
<attr name="属性名称" format="属性类型"/>
属性名称定义的时候不要和系统原生控件的属性名重合.
常见属性类型如下:
属性类型名称 属性类型 color 颜色 boolean 布尔类型 string 文本类型
folat 小数 dimension 尺寸类型(如100dp) reference 引用类型(如@String) reference|color 引用或者颜色 - 调用context.obtainStyledAttributes方法获取自定义的属性的值
- 在原布局中使用自定义控件. 注意: 自定义控件的属性命名空间要自己定义.
代码 :
新建布局. 新建的布局就是多个原生控件的组合,把这些控件单独放在一个布局文件中