Android 原生控件之四 Button
- 相關
- 來源
- 開始
-
- 簡單使用
- XML屬性
- 自定義樣式
-
- 無邊框按鈕
- 自定義背景
- 自定義drawable
- 完事
相關
Android 原生控件之一 TextView
Android 原生控件之二 ImageView
Android 原生控件之三 ProgressBar
來源
下面的知識來源來自于官方文檔(全英文):
Button
以後要是有更新,我也會盡力跟着修正。
開始
Button
描述:使用者可以點選或單擊以執行操作的使用者界面元素。
- 直接子類如下:CompoundButton
- 間接子類如下:CheckBox, RadioButton, Switch, ToggleButton
簡單使用
要在活動中顯示按鈕,請在活動的布局XML檔案中添加一個按鈕:
<Button
android:id="@+id/button_id"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/self_destruct" />
要在按下按鈕時指定操作,請在相應活動代碼中的按鈕對象上設定單擊偵聽器:
public class MyActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_layout_id);
final Button button = findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Code here executes on main thread after user presses button
}
});
}
}
上面的代碼片段建立了一個
View.OnClickListener
執行個體,并使用
setOnClickListener(View.OnClickListener)
将偵聽器連接配接到該按鈕。是以,系統會在使用者按下按鈕後執行您在
onClick(View)
中編寫的代碼。
每個按鈕都使用系統的預設按鈕背景設定樣式,這通常不同于平台的一個版本到另一個版本。如果您對預設按鈕樣式不滿意,可以自定義它。
XML屬性
emmm…

Button是繼承TextView的,沒有自身特有的XML屬性。
自定義樣式
Button最重要的功能其實是自定義樣式,畢竟隻是個按鈕,能按就行,頁面布局的風格樣式才是每次使用的時候都不相同的地方。
參考連結:Styling Your Button
按鈕(背景圖像和字型)的外觀可能因裝置而異,因為不同制造商的裝置通常具有不同的輸入控件預設樣式。
您可以使用應用于整個應用程式的主題精确控制控件的樣式。例如,要確定運作Android 4.0及更高版本的所有裝置都在您的應用中使用Holo主題,請在清單的元素中聲明android:theme =“@ android:style / Theme.Holo”。
要自定義具有不同背景的單個按鈕,請使用drawable或color resource指定android:background屬性。或者,您可以為按鈕應用樣式,該樣式的工作方式類似于HTML樣式,以定義多個樣式屬性,例如背景,字型,大小等。
無邊框按鈕
一種有用的設計是“無邊框”按鈕。無邊框按鈕類似于基本按鈕,除了它們沒有邊框或背景但在不同狀态下仍然會改變外觀,例如單擊時。
要建立無邊框按鈕,請将
borderlessButtonStyle
樣式應用于按鈕。例如:
<Button
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"
style="?android:attr/borderlessButtonStyle" />
表現:
自定義背景
如果要真正重新定義按鈕的外觀,可以指定自定義背景。但是,您的背景應該是狀态清單資源,而不是提供簡單的位圖或顔色,根據按鈕的目前狀态更改外觀。
您可以在XML檔案中定義狀态清單,該檔案定義用于不同按鈕狀态的三種不同圖像或顔色。
要為按鈕背景建立可繪制的狀态清單:
1、 為按鈕背景建立三個位圖,表示
預設
、
按下
和
聚焦
按鈕狀态。要確定圖像适合各種大小的按鈕,請将位圖建立為
.9圖
。
2、 将位圖放入項目的
res / drawable /
目錄中。確定每個位圖都被正确命名以反映它們各自代表的按鈕狀态,例如
button_default.9.png
、
button_pressed.9.png
和
button_focused.9.png
。
3、 在
res / drawable /
目錄中建立一個新的XML檔案(将其命名為
button_custom.xml
)。插入以下XML:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button_pressed"
android:state_pressed="true" />
<item android:drawable="@drawable/button_focused"
android:state_focused="true" />
<item android:drawable="@drawable/button_default" />
</selector>
這定義了一個可繪制資源,它将根據按鈕的目前狀态更改其圖像。
- 第一個定義按下(激活)按鈕時要使用的位圖。
- 第二個定義按鈕聚焦時使用的位圖(使用軌迹球或方向鍵突出顯示按鈕時)。
- 第三個定義了按鈕處于預設狀态時使用的位圖(既不按也不聚焦)。
元素的順序很重要。當引用此
<item>
時,将按順序周遊
drawable
元素以确定哪個元素适合目前按鈕狀态。因為預設位圖是最後一個,是以隻有當條件android:state_pressed和android:state_focused都被評估為false時才會應用它。
<item>
此XML檔案現在表示單個可繪制資源,當Button為其背景引用時,顯示的圖像将根據這三種狀态而更改。
4、然後隻需将drawable XML檔案應用為按鈕背景:
<Button
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"
android:background="@drawable/button_custom" />
自定義drawable
Android shape屬性大全
Android selector屬性說明
Android layer-list基本用法