要想讓你的button呈現出一種不一樣的外觀,一般會採取以下兩種形式
對第一種方式而言,只需要注意好「狀態對應的優先順序的程度」就可以了,否則會導致所設定的item不起作用的情形
如下是簡單的使用
<?xml version="1.0" encoding="utf-8" ?>
xmlns:android="">
android:drawable="@drawable/pic1" />
android:state_window_focused="false"
android:drawable="@drawable/pic1" />
android:state_focused="true"
android:state_pressed="true"
android:drawable= "@drawable/pic2" />
android:state_focused="false"
android:state_pressed="true"
android:drawable="@drawable/pic3" />
android:state_selected="true"
android:drawable="@drawable/pic4" />
android:state_focused="true"
android:drawable="@drawable/pic5" />
selector>
可能你已經注意到了,item對應了四個不同的狀態;
根據這些狀態同樣可以設定button的selector效果。也可以設定selector改變button中的文字狀態。
xml檔案建立好了,下一步就是如何使用了。方法很簡單,就是在button的xml檔案中加上android:background=」@drawable/mybutton」就可以了
接下來是通過控制xml**來實現對按鈕的外觀的改變,主要是通過shape的以下幾個屬性,
下面一起看乙個例子吧
<?xml version="1.0" encoding="utf-8"?>
xmlns:android="">
android:state_pressed="true" >
android:startcolor="#ff8c00"
android:endcolor="#ffffff"
android:type="radial"
android:gradientradius="50" />
android:width="2dp"
android:color="#dcdcdc"
android:dashwidth="5dp"
android:dashgap="3dp" />
android:radius="2dp" />
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
shape>
item>
android:state_focused="true" >
android:startcolor="#ffc2b7"
android:endcolor="#ffc2b7"
android:angle="270" />
android:width="2dp"
android:color="#dcdcdc" />
android:radius="2dp" />
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
shape>
item>
android:color="#ff9d77"/>
android:width="2dp"
android:color="#fad3cf" />
android:toprightradius="5dp"
android:bottomleftradius="5dp"
android:topleftradius="0dp"
android:bottomrightradius="0dp"
/>
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為角的弧度,值越大角越圓。
我們還可以把四個角設定成不同的角度,方法為:
"20dp" 右上角
android:bottomleftradius="20dp" 右下角
android:topleftradius="1dp" 左上角
android:bottomrightradius="0dp" 左下角
/>
這裡有個地方需要注意,bottomleftradius是右下角,而不是左下角,這個有點鬱悶,不過不影響使用,記得別搞錯了就行。
還有網上看到有人說設定成0dp無效,不過我在測試中發現是可以的,我用的是2.2,可能修復了這個問題吧,如果無效的話那就只能設成1dp了。
padding:間隔
總結:
使用第一種方式,方便快捷。但是缺點就是在很多時就很有可能會導致出現outofmemoryerror的錯誤,這樣我們還得手動的修改所用到的的大小,還是比較繁瑣的;而採用第二種方式就給我們帶來了很大的靈活性,我們可以隨心所欲的進行對按鈕的外觀的修改,而且相對而言,基本上不會出現第一種方式的記憶體危機。
Android自定義控制項 自定義屬性
自定義屬性的過程 1.在res values資料夾中建立attrs的xml檔案。2.寫入標籤,定義子標籤attr,放入自定義屬性的名稱。format 可以用 來同時使用 1 reference 參考某一資源id 2 color 顏色值 3 boolean 布林值 4 dimension 尺寸值 帶有...
Android自定義View 自定義元件
自繪控制項也分兩種,自定義元件和自定義容器,自定義元件是繼承view類,自定義容器時繼承viewgrounp 今天主要分析下自定義元件 還是舉個例子來的實際些,假如我們要畫乙個最簡單的textview,首先想到的就是canvas.drawtext 方法,怎麼畫了?還是得一步一步來 1 寫乙個myte...
Android自定義控制項之自定義View 二
效果如下圖 1 自定義ringview繼承view新增其構造方法並建立畫筆 public class ringview extends view protected boolean isrunning false public ringview context context public ring...