天天看點

Android 原生控件之四 Button相關來源開始完事

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…

Android 原生控件之四 Button相關來源開始完事

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" />
           

表現:

Android 原生控件之四 Button相關來源開始完事

自定義背景

如果要真正重新定義按鈕的外觀,可以指定自定義背景。但是,您的背景應該是狀态清單資源,而不是提供簡單的位圖或顔色,根據按鈕的目前狀态更改外觀。

您可以在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

時,将按順序周遊

<item>

元素以确定哪個元素适合目前按鈕狀态。因為預設位圖是最後一個,是以隻有當條件android:state_pressed和android:state_focused都被評估為false時才會應用它。

此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基本用法

完事