日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android shape.xml 属性详解

發布時間:2025/3/8 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android shape.xml 属性详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載源:http://blog.csdn.net/harvic880925/article/details/41850723

一、簡單使用

剛開始,就先不講一堆標簽的意義及用法,先簡單看看shape標簽怎么用。

1、新建shape文件

首先在res/drawable文件夾下,新建一個文件,命名為:shape_radius.xml

內容是這樣的:(先不需要理解,先看shape怎么用)

[html] view plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <shape?xmlns:android="http://schemas.android.com/apk/res/android"?>??
  • ????<corners?android:radius="20dip"/>??
  • ????<solid?android:color="#ff00ff"/>??
  • ??
  • </shape>??
  • 2、添加到控件中

    在定義好shape文件后,下一步就是將其添加到控件中,添加到控件中,一般是使用設置background屬性,將其為控件背景,下面,我們將其設置為MainActivity對應的布局中(activity_main.xml),將其設為TextView的背景,看顯示出來 是什么樣子的。

    [html] view plaincopy
  • <RelativeLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????xmlns:tools="http://schemas.android.com/tools"??
  • ????android:layout_width="match_parent"??
  • ????android:layout_height="match_parent"??
  • ????tools:context="com.harvic.tryshape.MainActivity"?>??
  • ??
  • ????<TextView??
  • ????????android:layout_width="wrap_content"??
  • ????????android:layout_height="wrap_content"??
  • ????????android:layout_margin="50dip"??
  • ????????android:text="@string/hello_world"???
  • ????????android:background="@drawable/shape_radius"/>??
  • ??????
  • </RelativeLayout>??
  • 顯示出來的結果是這樣的:



    二、基本屬性(corners、gradient、padding、size、solid、stroke)

    上面給大家簡單的講了下shape標簽組的簡單使用方法,下面就具體講講shape標簽里所具有的幾個子標簽及所具有的屬性。

    1、Corners

    [html] view plaincopy
  • <corners????//定義圓角????
  • ????android:radius="dimension"??????//全部的圓角半徑????
  • ????android:topLeftRadius="dimension"???//左上角的圓角半徑????
  • ????android:topRightRadius="dimension"??//右上角的圓角半徑????
  • ????android:bottomLeftRadius="dimension"????//左下角的圓角半徑????
  • ????android:bottomRightRadius="dimension"?/>????//右下角的圓角半徑????
  • Corners標簽是用來字義圓角的,其中radius與其它四個并不能共同使用。

    Android:radius:定義四個角的的圓角半徑。

    其它四個是逐個字義每個角的圓角半徑。

    使用:

    控件布局:

    [html] view plaincopy
  • <RelativeLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????android:layout_width="match_parent"??
  • ????android:layout_height="match_parent"?>??
  • ??
  • ????<TextView??
  • ????????android:layout_width="100dp"??
  • ????????android:layout_height="100dp"??
  • ????????android:layout_margin="50dip"??
  • ????????android:text="@string/hello_world"???
  • ????????android:background="@drawable/shape_radius"/>??
  • ?</RelativeLayout>??
  • shape定義:

    [html] view plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <shape?xmlns:android="http://schemas.android.com/apk/res/android"?>??
  • ????<corners?android:radius="20dip"/>??
  • ????<solid?android:color="#ffff00"/>??
  • </shape>??
  • 效果:



    2、solid

    solid用以指定內部填充色

    只有一個屬性:

    [html] view plaincopy
  • <solid??android:color="color"?/>????
  • 在上面的例子中,我們就將填充色指定為#ffff00了,如果我們不加圓角,只使用填充色,即將shape變成這樣子:

    [html] view plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <shape?xmlns:android="http://schemas.android.com/apk/res/android"?>??
  • ????<solid?android:color="#ffff00"/>??
  • </shape>??
  • 那效果就是這樣的:



    3、gradient

    gradient用以定義漸變色,可以定義兩色漸變和三色漸變,及漸變樣式,它的屬性有下面幾個:

    [html] view plaincopy
  • <gradient???
  • ????android:type=["linear"?|?"radial"?|?"sweep"]????//共有3中漸變類型,線性漸變(默認)/放射漸變/掃描式漸變????
  • ????android:angle="integer"?????//漸變角度,必須為45的倍數,0為從左到右,90為從上到下????
  • ????android:centerX="float"?????//漸變中心X的相當位置,范圍為0~1????
  • ????android:centerY="float"?????//漸變中心Y的相當位置,范圍為0~1????
  • ????android:startColor="color"???//漸變開始點的顏色????
  • ????android:centerColor="color"??//漸變中間點的顏色,在開始與結束點之間????
  • ????android:endColor="color"????//漸變結束點的顏色????
  • ????android:gradientRadius="float"??//漸變的半徑,只有當漸變類型為radial時才能使用????
  • ????android:useLevel=["true"?|?"false"]?/>??//使用LevelListDrawable時就要設置為true。設為false時才有漸變效果????
  • 首先有三種漸變類型,分別是:linear(線性漸變)、radial(放射性漸變)、sweep(掃描式漸變)

    (1)先看看這幾個屬性的使用方法:

    [html] view plaincopy
  • android:type=["linear"?|?"radial"?|?"sweep"]??
  • android:startColor="color"???//漸變開始點的顏色????
  • android:centerColor="color"??//漸變中間點的顏色,在開始與結束點之間????
  • android:endColor="color"????//漸變結束點的顏色????
  • android:gradientRadius="float"??//漸變的半徑,只有當漸變類型為radial時才能使用????
  • 下面我們使用三色漸變來看看這三種漸變方式都是怎么顯示的:(如果不使用centerColor屬性就是雙色漸變,這個屬性是可選的)


    需要注意的一點是,在構造放射性漸變時,要加上android:gradientRadius屬性(漸變半徑),即必須指定漸變半徑的大小才會起作用,下面列出這三個漸變方式的shape代碼,供大家參考:

    線性漸變:

    [html] view plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <shape?xmlns:android="http://schemas.android.com/apk/res/android"?>??
  • ????<gradient???
  • ????????android:type="linear"??
  • ????????android:startColor="#ff0000"??
  • ????????android:centerColor="#00ff00"??
  • ????????android:endColor="#0000ff"/>??
  • </shape>??
  • 放射性漸變:

    [html] view plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <shape?xmlns:android="http://schemas.android.com/apk/res/android"?>??
  • ????<gradient???
  • ????????android:type="radial"??
  • ????????android:startColor="#ff0000"??
  • ????????android:centerColor="#00ff00"??
  • ????????android:endColor="#0000ff"??
  • ????????android:gradientRadius="100"/>??
  • </shape>??
  • 掃描式漸變:

    [html] view plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <shape?xmlns:android="http://schemas.android.com/apk/res/android"?>??
  • ????<gradient???
  • ????????android:type="sweep"??
  • ????????android:startColor="#ff0000"??
  • ????????android:centerColor="#00ff00"??
  • ????????android:endColor="#0000ff"/>??
  • </shape>??
  • 可見放射性漸變,只是比其它兩個多了個android:gradientRadius屬性

    (2)、android:angle屬性(僅對線性漸變有效)

    [html] view plaincopy
  • android:angle="integer"?????//漸變角度,必須為45的倍數,0為從左到右,90為從上到下????
  • 我們在上面的三種漸變上都加上angle屬性,看看效果如何:


    能過跟上一個圖對比可以發現,angle屬性確實只對線性漸變有效,其它兩種漸變方式都沒有任何動靜,下面是此時的線性漸變shape代碼:

    [html] view plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <shape?xmlns:android="http://schemas.android.com/apk/res/android"?>??
  • ????<gradient???
  • ????????android:type="linear"??
  • ????????android:startColor="#ff0000"??
  • ????????android:centerColor="#00ff00"??
  • ????????android:endColor="#0000ff"??
  • ????????android:angle="45"/>??
  • </shape>??
  • (3)、android:centerX與android:centerY

    centerX、centerY兩個屬性用于設置漸變的中心點位置,僅當漸變類型為放射漸變時有效,類型為分數或小數,不接受Dimension。默認值是0.5,有效值是0.0~1.0,超出該范圍后會看不出漸變效果。centerX、centerY的取值其實是寬和高的百分比;不難理解,下面看代碼:

    [html] view plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <shape?xmlns:android="http://schemas.android.com/apk/res/android"?>??
  • ????<gradient???
  • ????????android:type="sweep"??
  • ????????android:startColor="#ff0000"??
  • ????????android:centerColor="#00ff00"??
  • ????????android:endColor="#0000ff"??
  • ????????android:centerX="0.2"??
  • ????????android:centerY="0.8"/>??
  • </shape>??
  • 取寬度的20%和高度的80%的位置,作為新的漸變原點,效果是這樣的:


    (4)android:useLevel

    useLevel屬性通常不使用。該屬性用于指定是否將該shape當成一個LevelListDrawable來使用,默認值為false。

    4、stroke

    這是描邊屬性,可以定義描邊的寬度,顏色,虛實線等

    [html] view plaincopy
  • <stroke?????????
  • ????android:width="dimension"???//描邊的寬度????
  • ????android:color="color"???//描邊的顏色????
  • ????//?以下兩個屬性設置虛線????
  • ????android:dashWidth="dimension"???//虛線的寬度,值為0時是實線????
  • ????android:dashGap="dimension"?/>??????//虛線的間隔???
  • 上面各個屬性的意義如下:

    我們使用綠色虛線描邊,虛線高度是20dp,虛線寬度為10dp虛線間距為1dp:

    [html] view plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <shape?xmlns:android="http://schemas.android.com/apk/res/android"?>??
  • ????<stroke???
  • ????????android:width="20dp"???
  • ????????android:color="#00ff00"??
  • ????????android:dashWidth="10dp"??
  • ????????android:dashGap="1dp"?/>??
  • </shape>??
  • 從效果圖中,我們也能清晰的看出這三個參數(width、dashwidth、dashGap)之間的區別:

    5、size和padding

    這兩個基本上不怎么用,因為他們所具有的功能,控件本身也能實現。
    size:是用來定義圖形的大小的。

    [html] view plaincopy
  • <size????
  • ????android:width="dimension"????
  • ????android:height="dimension"?/>??
  • padding:用來定義內部邊距

    [html] view plaincopy
  • <padding?????
  • ????android:left="dimension"????
  • ????android:top="dimension"????
  • ????android:right="dimension"????
  • ????android:bottom="dimension"?/>??
  • ?

    三、Shape的屬性(rectangle、oval、line、ring)

    上面我們講了Shape的子標簽的的作用,但Shape本身還沒講,Shape自已是可以定義當前Shape的形狀的,比如上面的矩形,還有橢圓形,線形和環形;這些都是通過Shape標簽的 shape屬性來定義的,Shape標簽總共有下面幾個屬性,我們一個個講:

    [html] view plaincopy
  • android:shape=["rectangle"?|?"oval"?|?"line"?|?"ring"]????
  • shape的形狀,默認為矩形,可以設置為矩形(rectangle)、橢圓形(oval)、線性形狀(line)、環形(ring)????
  • 下面的屬性只有在android:shape="ring時可用:????
  • android:innerRadius?????????尺寸,內環的半徑。????
  • android:innerRadiusRatio????浮點型,以環的寬度比率來表示內環的半徑,????
  • android:thickness???????????尺寸,環的厚度????
  • android:thicknessRatio??????浮點型,以環的寬度比率來表示環的厚度,例如,如果android:thicknessRatio="2",????
  • android:useLevel????????????boolean值,如果當做是LevelListDrawable使用時值為true,否則為false.???
  • 可見,只有第一個shape是可用的,其它五個都是shape等于ring時所特有的。

    注意,無論這里shape取什么形狀,他的子標簽都是可用的,但有時并不會有效果,比如在shape為橢圓時,那corners標簽就不會有效果,很顯然的道理。下面一個個看看各個形狀都是怎么樣的;

    1、rectangle (矩形)

    這就是上一節我們使用的形狀,當我們不指定shape屬性時,默認就是矩形的。?

    控件代碼:

    [html] view plaincopy
  • <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????android:layout_width="match_parent"??
  • ????android:layout_height="match_parent"??
  • ????android:orientation="horizontal"?>??????
  • ????<TextView??
  • ????????android:layout_width="300dp"??
  • ????????android:layout_height="100dp"??
  • ????????android:layout_margin="10dp"??
  • ????????android:textColor="#ffffff"??
  • ????????android:textSize="18sp"??
  • ????????android:textStyle="bold"??
  • ????????android:background="@drawable/try_shape_3"/>??
  • ?</LinearLayout>??
  • shape代碼:

    [html] view plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <shape?xmlns:android="http://schemas.android.com/apk/res/android"???
  • ????android:shape="rectangle">??
  • ????<solid?android:color="#ff00ff"/>??
  • </shape>??
  • 對應圖形:

    2、oval(橢圓)

    控件代碼不變,下面是shape代碼:

    [html] view plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <shape?xmlns:android="http://schemas.android.com/apk/res/android"???
  • ????android:shape="oval">??
  • ????<solid?android:color="#ff00ff"/>??
  • </shape>??
  • 對應圖形:(控件大小的矩形所對應的橢圓)


    3、line(線形)

    沒覺得這個能有什么用……,也不講了,沒什么意思

    4、ring(環形)

    還記得他所特有的幾個屬性么:

    [html] view plaincopy
  • android:innerRadius?????????尺寸,內環的半徑。????
  • android:thickness???????????尺寸,環的厚度????
  • android:innerRadiusRatio????浮點型,以環的寬度比率來表示內環的半徑,????
  • ??????例如,如果android:innerRadiusRatio,表示內環半徑等于環的寬度除以5,這個值是可以被覆蓋的,默認為9.????
  • android:thicknessRatio??????浮點型,以環的寬度比率來表示環的厚度,例如,如果android:thicknessRatio="2",????
  • ??????那么環的厚度就等于環的寬度除以2。這個值是可以被android:thickness覆蓋的,默認值是3.????
  • android:useLevel????????????boolean值,如果當做是LevelListDrawable使用時值為true,否則為false.??
  • 這么幾個屬性無外乎就是定義環形的內環尺寸和環的寬度。

    舉個例子:

    控件定義:

    [html] view plaincopy
  • <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????android:layout_width="match_parent"??
  • ????android:layout_height="match_parent"??
  • ????android:orientation="horizontal"?>??????
  • ????<TextView??
  • ????????android:layout_width="300dp"??
  • ????????android:layout_height="100dp"??
  • ????????android:layout_margin="10dp"??
  • ????????android:textColor="#ffffff"??
  • ????????android:textSize="18sp"??
  • ????????android:textStyle="bold"??
  • ????????android:background="@drawable/try_shape_2"/>??
  • ?</LinearLayout>??
  • shape定義:(這里一定要要加上useLevel屬性并定義為false,不然沒有效果)

    [html] view plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <shape?xmlns:android="http://schemas.android.com/apk/res/android"???
  • ????android:shape="ring"???
  • ????android:innerRadius="20dp"???
  • ????android:thickness="50dp"????
  • ????android:useLevel="false">??
  • ??????
  • ????<solid?android:color="#ff00ff"/>??
  • ??????
  • </shape>??
  • 效果圖:



    源碼地址:http://download.csdn.net/detail/harvic880925/8249629
    請大家尊重原創者版權,轉載請標時出處:http://blog.csdn.net/harvic880925/article/details/41850723?謝謝。

    轉載于:https://www.cnblogs.com/imqsl/p/6561173.html

    總結

    以上是生活随笔為你收集整理的android shape.xml 属性详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。