Android自定义Button的“款式”
2015-12-09 12:27
369 查看
要想让你的button呈现出一种不一样的外观,一般会采取以下两种形式
采用selector里面加图片的方式
采用selector用shape进行代码控制的方式
对第一种方式而言,只需要注意好“状态对应的优先级的程度”就可以了,否则会导致所设置的item不起作用的情形
如下是简单的使用
可能你已经注意到了,item对应了四个不同的状态;
android:state_selected是选中
android:state_focused是获得焦点
android:state_pressed是点击
android:state_enabled是设置是否响应事件,指所有事件
根据这些状态同样可以设置button的selector效果。也可以设置selector改变button中的文字状态。
xml文件创建好了,下一步就是如何使用了。方法很简单,就是在button的xml文件中加上android:background=”@drawable/mybutton”就可以了
接下来是通过控制xml代码来实现对按钮的外观的改变,主要是通过shape的以下几个属性,
gradient//渐变
stroke;//描边
corner;//圆角
pading;//边距
下面一起看一个例子吧
下面是从网上找到的一些具体的解释信息,总结得很好
总结:
使用第一种方式,方便快捷。但是缺点就是在图片很多时就很有可能会导致出现OutOfMemoryError的错误,这样我们还得手动的修改所用到的图片的大小,还是比较繁琐的;而采用第二种方式就给我们带来了很大的灵活性,我们可以随心所欲的进行对按钮的外观的修改,而且相对而言,基本上不会出现第一种方式的内存危机。
采用selector里面加图片的方式
采用selector用shape进行代码控制的方式
对第一种方式而言,只需要注意好“状态对应的优先级的程度”就可以了,否则会导致所设置的item不起作用的情形
如下是简单的使用
<?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 默认时的背景图片--> <item android:drawable="@drawable/pic1" /> <!-- 没有焦点时的背景图片 --> <item android:state_window_focused="false" android:drawable="@drawable/pic1" /> <!-- 非触摸模式下获得焦点并单击时的背景图片 --> <item android:state_focused="true" android:state_pressed="true" android:drawable= "@drawable/pic2" /> <!-- 触摸模式下单击时的背景图片--> <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/pic3" /> <!--选中时的图片背景--> <item android:state_selected="true" android:drawable="@drawable/pic4" /> <!--获得焦点时的图片背景--> <item android:state_focused="true" android:drawable="@drawable/pic5" /> </selector>
可能你已经注意到了,item对应了四个不同的状态;
android:state_selected是选中
android:state_focused是获得焦点
android:state_pressed是点击
android:state_enabled是设置是否响应事件,指所有事件
根据这些状态同样可以设置button的selector效果。也可以设置selector改变button中的文字状态。
xml文件创建好了,下一步就是如何使用了。方法很简单,就是在button的xml文件中加上android:background=”@drawable/mybutton”就可以了
接下来是通过控制xml代码来实现对按钮的外观的改变,主要是通过shape的以下几个属性,
gradient//渐变
stroke;//描边
corner;//圆角
pading;//边距
下面一起看一个例子吧
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" > <shape> <!-- 渐变 --> <gradient android:startColor="#ff8c00" android:endColor="#FFFFFF" android:type="radial" android:gradientRadius="50" /> <!-- 描边 --> <stroke android:width="2dp" android:color="#dcdcdc" android:dashWidth="5dp" android:dashGap="3dp" /> <!-- 圆角 --> <corners android:radius="2dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> <item android:state_focused="true" > <shape> <gradient android:startColor="#ffc2b7" android:endColor="#ffc2b7" android:angle="270" /> <stroke android:width="2dp" android:color="#dcdcdc" /> <corners android:radius="2dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> <item> <shape> <solid android:color="#ff9d77"/> <stroke android:width="2dp" android:color="#fad3cf" /> <corners android:topRightRadius="5dp" android:bottomLeftRadius="5dp" android:topLeftRadius="0dp" android:bottomRightRadius="0dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> </selector>
下面是从网上找到的一些具体的解释信息,总结得很好
solid:实心,就是填充的意思 android:color指定填充的颜色 gradient:渐变 android:startColor和android:endColor分别为起始和结束颜色,ndroid:angle是渐变角度,必须为45的整数倍。 另外渐变默认的模式为android:type="linear",即线性渐变,可以指定渐变为径向渐变,android:type="radial",径向渐变需要指定半径android:gradientRadius="50"。 stroke:描边 android:width="2dp" 描边的宽度,android:color 描边的颜色。 我们还可以把描边弄成虚线的形式,设置方式为: android:dashWidth="5dp" android:dashGap="3dp" 其中android:dashWidth表示'-'这样一个横线的宽度,android:dashGap表示之间隔开的距离。 corners:圆角 android:radius为角的弧度,值越大角越圆。 我们还可以把四个角设定成不同的角度,方法为: <corners android:topRightRadius="20dp" 右上角 android:bottomLeftRadius="20dp" 右下角 android:topLeftRadius="1dp" 左上角 android:bottomRightRadius="0dp" 左下角 /> 这里有个地方需要注意,bottomLeftRadius是右下角,而不是左下角,这个有点郁闷,不过不影响使用,记得别搞错了就行。 还有网上看到有人说设置成0dp无效,不过我在测试中发现是可以的,我用的是2.2,可能修复了这个问题吧,如果无效的话那就只能设成1dp了。 padding:间隔
总结:
使用第一种方式,方便快捷。但是缺点就是在图片很多时就很有可能会导致出现OutOfMemoryError的错误,这样我们还得手动的修改所用到的图片的大小,还是比较繁琐的;而采用第二种方式就给我们带来了很大的灵活性,我们可以随心所欲的进行对按钮的外观的修改,而且相对而言,基本上不会出现第一种方式的内存危机。
相关文章推荐
- Android自定义Button的“款式”
- pAdPt_-6 LearnBdMapBasic[(百度)地图(Android SDK)基础]
- Android PopupMenu 与 PopupWindow(的区别)
- android L 新控件侧滑菜单DrawerLayout 使用教程
- android中Webview与javascript的交互(互相调用)
- Android中SwipeBack右滑返回(手势返回)的实现
- Android File类 根据官方文档理解
- Android5.0 AsyncTask的实现分析
- Android Studio中Xml的新建及shape绘图
- 适配Android6.0
- Android OTA在线升级二
- android开发之如何使TabHost的TabWidget位于屏幕下方
- Android实现实时视频通话或监控方案
- Android 沉浸式状态栏实现,以及遇到的问题
- android studio 2.0 preview 编译报错
- Android Studio JNI 基础入门--Hello World
- Android通过URL跟web服务器通信那点破事
- android:ToolBar详解(手把手教程)
- 吐槽Android的SharedPreferences(保存不了数据)
- Android适配全攻略(分享)