Android自定義Button的「款式」

2021-09-22 17:38:04 字數 3478 閱讀 2994

要想讓你的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...