码迷,mamicode.com
首页 > 其他好文 > 详细

由如何设置圆角按钮引发的思考

时间:2015-05-02 12:33:38      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:

??你是不是觉得谷歌官方的按钮很丑呢?哈哈~~这里就如何给按钮设置圆角提供一些思路:

??在Android中,给一个控件(或View)设置背景主要是通过background:xxx属性来完成。background的参数一般来说是一个drawable资源。 drawable可以是一张普通的图片,也可以是9 patch图片,还可以是一个xml文件。

方法1:图片

??给控件设置边框最简单的方式就是把background设置成你预先设计好的带圆角和边框的背景图。

??但是,你很快会发现一个缺点:灵活性很差!是的,固定大小的图片很难根据控件里的内容而调整大小。它在被做出来的那天就已经被确定了!换句话说,你很难只用这一张图来应付拥有相同风格却大小各异的控件。为了给所有控件加上圆角和边框,你必须小心翼翼地计算他们的大小,然后一个一个得制作背景图片!天哪,这简直太愚蠢了。一旦遇到大小不定的控件,这方法就歇菜了。而且,大量的背景图片会让你的安装包迅速膨胀。呃……还有,你怎么应对拥有各式各样分辨率的Android设备呢?

??所以,你需要……换个方法。

??比较为大众采用一种解决方案是NinePatch。可以毫不夸张得说,9 patch是Android中解决自适应问题的利器。

??使用9 patch图片有很多好处,如减轻美工压力,减少UI代码量,减少内存使用……总结起来就是:省时省力,屌爆了。

??当然,9 patch能做的是远远比这多,如做一个自适应的对话框什么的。一般9patch做出的图片结尾是.9.jpg。

更多关于9pach的文章请参考:http://blog.csdn.net/whyrjj3/article/details/7852642

方法2:xml文件

??Android除了支持原始的图片资源外,比较棒的一点就是可以用XML文件定义一些简单的图形。这有点像web的CSS,不过相比CSS3,Android的xml实现还没那么强大。其实就是背景选择器。

在res目录下的drawable-mdpi建立xml文件shape.xml,如下图所示:

技术分享

shape.xml:

<?xml version="1.0" encoding="UTF-8"?>
<shape
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        >
    <!-- 填充的颜色 -->
    <solid android:color="#fff"/>
    <!-- 设置按钮的四个角为弧形 -->
    <!-- android:radius 弧形的半径 -->
    <corners android:radius="5dip"/>
    <stroke android:color="#ffbdbdbd"
            android:width="1dp"
            ></stroke>
    <!-- padding:Button里面的文字与Button边界的间隔 -->
    <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp"
            />
</shape>

在activity_login.xml中使用它:

<Button
                android:id="@+id/login"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="登录"
                android:layout_marginRight="50dp"
                android:textSize="15sp"
                android:background="@drawable/shape"
                />

效果图:
技术分享

关于shape中的属性说明:
solid

  • 描述:内部填充
  • 属性:android:color 填充颜色

size

  • 描述:大小
  • 属性:
    android:width 宽
    android:height 高

gradient

  • 描述:渐变色
  • 属性:
    android:startColor渐变起始颜色
    android:endColor渐变结束颜色
    android:centerColor渐变中间颜色
    android:angle 渐变的角度,angle=0时,渐变色是从左向右,然后逆时针方向转;当angle=90时,渐变色从上往下。angle必然是45的倍数
    android:type 渐变类型:linear(线性)、radial(放射性,以开始色为中心)、sweep(扫描线式渐变)
    android:userLevel如果要使用LevelListDrawable对象,就要设置为true。设置true无渐变色,false有渐变色
    android:grdientRadial渐变半径,只有设置type为radial时,此值才生效
    android:centerX 渐变中心X点坐标的相对位置
    android:centerY 渐变中心Y点坐标的相对位置

stroke

  • 描述:描边
  • 属性:
    android:width 描边宽度
    android:color 描边颜色
    android:dashwidth描边样式为虚线时的宽度,值为0时为实线,值大于0时为虚线
    android:dashGap 描边为虚线时,虚线之间的间隔

corners

  • 描述:圆角
  • 属性:
    android:radius 四个角半径值
    android:topLeftRadius左上角半径值
    android:topRightRadius右上角半径值
    android:bottomLeftRadius右下角半径值
    android:bottomRightRadius左下角半径值

padding

  • 描述:内边距
  • 属性:
    android:left 左内边距
    android:right 右内边距
    android:top 上内边距
    android:bottom 下内边距

方法3:java代码

??要在Android中实现圆角和边框,比较简单的方法:图片、XML差不多就是这么用的啦。此外还有用Java代码调用draw方法画出来的。

感恩:

http://blog.xianqu.org/2012/04/android-borders-and-radius-corners/

http://blog.csdn.net/whyrjj3/article/details/7852642

http://www.cnblogs.com/tinyphp/p/3829895.html

http://www.cnblogs.com/gzggyy/archive/2013/05/17/3083218.html

_____________________________对不起,请原谅我,谢谢你,我爱你

由如何设置圆角按钮引发的思考

标签:

原文地址:http://blog.csdn.net/a910626/article/details/45438429

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!