在筆者本人看了很多博客和書之後,發現很少博主對於自定義控制項能夠進行一個比較全面的思路講解,大多數都是只講了一些細節,但並沒有講如何把代碼進行整體的實現。因此這裡講講整體的自定義button實現的詳細過程,其餘的細節則可以查看其他博主的博客即可,也可以參考《Android開發藝術探索》這本書的第六章, ...
在筆者本人看了很多博客和書之後,發現很少博主對於自定義控制項能夠進行一個比較全面的思路講解,大多數都是只講了一些細節,但並沒有講如何把代碼進行整體的實現。因此這裡講講整體的自定義button實現的詳細過程,其餘的細節則可以查看其他博主的博客即可,也可以參考《Android開發藝術探索》這本書的第六章,看了我這篇博文之後,相信你一定對自定義控制項會有一定的瞭解。
首先是創建一個根節點為shape的xml,用於描述我們所創建的button沒有被按時的界面,如圖:
我們可以看到其四周都是由圓角來修飾的,那麼我們怎麼在shape根節點里把這個button的樣式寫出來呢?我們來看看代碼,不知道如何創建shape文件的童鞋可以參考一下這個百度經驗,傳送門:https://jingyan.baidu.com/article/b907e62795139746e7891cb9.html
一.button_bg.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#ff9d77" > </solid> <stroke android:width="2dp" android:color="#fad3cf"> </stroke> <corners android:bottomLeftRadius="20dp" android:bottomRightRadius="20dp" android:topLeftRadius="20dp" android:topRightRadius="20dp" > </corners> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" > </padding> </shape>
這樣我們的按鈕自定義界面就完成了,這是在沒被按住的情況下,下麵再來看看在按住情況下的程式代碼,也是一個shape文件,後面我們會用選擇器對它們的邏輯進行整合,最後在Button控制項里進行調用這個選擇器的邏輯。
二.demo.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <gradient android:endColor="#FFFFFF" android:gradientRadius="200dp" android:startColor="#ff8c00" android:type="radial" > </gradient> <stroke android:width="5dp" android:color="#dcdcdc" > </stroke> <corners android:radius="23dp" > </corners> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" > </padding> </shape>
這樣在按下按鈕之後,就會呈現出來不同的顯示效果,可以讓用戶明顯感受到一種人機交互的感覺,之後是我們的選擇器,因為在主活動當中我們只能夠調用我們的選擇器從而引出這兩個效果。
三.selector.xml
這個文件的創建方式和shape類似,這裡就不多說了,我們直接上代碼:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/demo" android:state_pressed="true"></item> <item android:drawable="@drawable/button_bg"></item> </selector>
我們可以看到在第一個item下麵描述的是我們的按鈕被按下去的界面將會變成demo.xml,平時正常的界面則是button_bg了。這就是上述代碼的含義,之後我們再去主活動當中調用這個選擇器,之後我們的自定義button就輕鬆完成啦!
四.activity.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="我是一個按鈕" android:background="@drawable/selector"/> </android.support.constraint.ConstraintLayout>
可以看到我們在button控制項當中的backgroud屬性當中引入了我們的選擇器,這樣子呢就可以把之前我們所定義的界面引入到這個button按鈕當中了。