记得以前学习 Qt Widget 的时候用 qss 来实现界面的样式,html 是通过 css 来实现界面的样式,同理,现在在 Android 里面,它也有一套可以实现界面样式开发的机制,它提供了 ShapeDrawable、StateListDrawable、LayerDrawable、ClipDrawable、LieveListDrawable、TranstionDrawable 等等这些可绘制的对象,而且开发者可以通过 xml 来定义这样对象,然后将 xml 做为资源文件来使用,从而实现 Android 的样式开发,下面就简单写写各种 Drawable 的使用方法,详细信息推荐查看官方文档,官方文档有更加详尽的解释。
ShapeDrawable
可以定制化 View 的形状,比如 按钮的圆角、矩形的圆角、矩形的边框、虚线框等等。
可以实现颜色渐变。
可绘制的图像主要有矩形(默认)、椭圆、线、环形这四种。StateListDrawable (可根据不同的状态显示不同的可绘制对象)
它根据对象的状态,使用多个不同的图像来表示同一个图形。例如,Button 小部件可以是多种不同状态(按下、聚焦或这两种状态都不是)中的其中一种,而且可以利用状态列表可绘制对象为每种状态提供不同的背景图片。
在每个状态变更期间,将从上到下遍历状态列表,并使用第一个与当前状态匹配的项目,所以,此选择并非基于“最佳匹配”,而是选择符合状态最低条件的第一个项目。LevelListDrawable (可根据不同的Level值来显示不同的可绘制对象)
可以通过 maxLevel、minLevel 这两个属性来给某一个可绘制对象定义一个 level 范围, 然后再程序中使用 setLevel() 设置可绘制对象的级别值时,会根据 level 的范围来匹配不同的可绘制对象。LayerDrawable
管理其他可绘制对象阵列的可绘制对象。列表中的每个可绘制对象按照列表的顺序绘制,列表中的最后一个可绘制对象绘于顶部。TransitionDrawable
TransitionDrawable 是 LayerDrawable 的子类,它只可以管理两个可绘制资源,可以使得这两个在切换的时候可以有交错淡出的效果。ClipDrawable
可以对其他可绘制对象进行剪裁,可以实现进度条的效果。ScaleDrawable
可以对可绘制对象进行放缩操作。InsetDrawable
可以在其他可绘制对象上面插入另外一个可绘制对象。
另外,这些可绘制对象是可以嵌套和混合使用的。