天天看点

Android形状属性Shape的使用(一)说明一、shape的基本属性二、shape的基本语法三、使用

说明

Android开发中,我们经常会遇到需要改变某个控件的背景,或者定义某个控件的形状,这时候我们可以使用Shape帮助我们定义各种各样的形状。相比传统的使用图片资源可以减少资源占用,减少安装包大小,还能很好的适配不同尺寸的手机。

一、shape的基本属性

shape可以定义四种形状:

rectangle:矩形

oval:椭圆形

line:线行

ring:环形

同时shape通过子标签也可以定义控件的一些展示效果,如:

圆角:corners

渐变:gradient

填充:solid

描边:stroke

大小:size

边距:padding

二、shape的基本语法

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"] > // 定义形状
    
     <corners    //定义圆角   
	    android:radius="10dp"  //全部的圆角半径;   
	    android:topLeftRadius="5dp"  //左上角的圆角半径;   
	    android:topRightRadius="5dp" //右上角的圆角半径;   
	    android:bottomLeftRadius="5dp"  //左下角的圆角半径;   
	    android:bottomRightRadius="5dp" /> //右下角的圆角半径。
	    
     <gradient   //渐变属性,用以定义渐变色,可以定义两色渐变和三色渐变,及渐变样式
         //共有3中渐变类型,线性渐变(默认)/放射渐变/扫描式渐变;
	    android:type=["linear" | "radial" | "sweep"]  
	    android:angle="90"  //渐变角度,必须为45的倍数,0为从左到右,90为从上到下;   
	    android:centerX="0.5"  //渐变中心X的相当位置,范围为0~1;
	    android:centerY="0.5"  //渐变中心Y的相当位置,范围为0~1;   
	    android:startColor="#24e9f2"  //渐变开始点的颜色;   
	    android:centerColor="#2564ef" //渐变中间点的颜色,在开始与结束点之间;   
	    android:endColor="#25f1ef"  //渐变结束点的颜色;   
	    android:gradientRadius="5dp"  //渐变的半径,只有当渐变类型为radial时才能使用;   
	    android:useLevel="false" /> //使用LevelListDrawable时就要设置为true。设为false时才有渐变效果。  
	    
    <padding //边距属性:是用来定义内部边距
        android:left="10dp"  //左内边距; 
	    android:top="10dp"   //上内边距;
	    android:right="10dp"   //右内边距;
	    android:bottom="10dp" /> //下内边距。
	    
    <size //大小属性:用来定义图形的大小
         android:width="50dp"  //宽度 
  		  android:height="50dp" />// 高度
  		  
    <solid //填充属性
        android:color="color" /> //内部填充色
        
    <stroke //描边属性:可以定义描边的宽度,颜色,虚实线等
        android:width="1dp"   //描边的宽度   
	    android:color="#ff0000"   //描边的颜色   
	    // 以下两个属性设置虚线   
	    android:dashWidth="1dp" //虚线的宽度,值为0时是实线   
	    android:dashGap="1dp" />//虚线的间隔
	    
</shape>
           

特殊属性语法:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
  android:shape=["rectangle" | "oval" | "line" | "ring"] //shape的形状,默认为矩形,可以设置为矩形(rectangle)、椭圆形(oval)、线性形状(line)、环形(ring)   
  //下面的属性只有在android:shape="ring"时可用:   
  android:innerRadius="10dp" //  内环的半径; 
  android:innerRadiusRatio="2"  // 浮点型,以环的宽度比率来表示内环的半径;   
  android:thickness="3dp"   // 环的厚度;   
  android:thicknessRatio="2" //  浮点型,以环的宽度比率来表示环的厚度;  
  android:useLevel="false"> //  boolean值,如果当做是LevelListDrawable使用时值为true,否则为false。
</shape>
           

三、使用

1.在res/drawable下新建shape配置文件:(名字自定义如:shape_text.xml)

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners  
        android:radius="5dp"
        android:topLeftRadius="15dp"
        android:topRightRadius="15dp"
        android:bottomLeftRadius="15dp"
        android:bottomRightRadius="15dp" />
     
    <gradient
        android:startColor="#FF0000"
        android:endColor="#80FF00"
        android:angle="45"/> 
        
    <padding 
         android:left="10dp"
         android:top="10dp"
         android:right="10dp"
         android:bottom="10dp"/>
     
    <size
        android:width="200dp"
        android:height="200dp"/>
    
    <solid 
        android:color="#ffff9d"/>
    
    <stroke 
        android:width="2dp"
        android:color="#dcdcdc"/> 
</shape>
           

2.在布局中引入shape_text.xml

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent">  
    <TextView  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="Shape测试"  
        android:background="@drawable/shape_text"  
        android:textSize="15sp"  
        android:textColor="@android:color/black"/>  
</LinearLayout>
           

下一篇继续探索每一种类型的具体使用:Android形状属性Shape的使用(二)