本節引言:
Android的View不僅僅能夠展示資料,還可以與使用者互動(響應使用者的操作)。我們經常用到與使用者互動的一個控件就是Button,它可以響應使用者的點選操作。現在我們就來看看Butoon具體如何使用。
1.基本屬性
首先,Button是繼承自TextView的,也就是說它可以使用TextView的屬性,比如 android:text。那就寫一個Button看看吧:

效果很簡單,代碼其實也就一兩行,如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按鈕" />
</RelativeLayout>
運作之後你會發現,Button與TextView很相似呀(開頭說過,它們是繼承關系,是以就像咯)。它們的差別在哪?
- Button的文字内容是預設居中的,也就是說它的 android:gravity預設等于為center。
- Button預設有一個背景色,點選時還會發生變化。(這個預設背景根據運作時Android系統不同會有差别)。
這就是Button對比于TextView主要的不同點,那麼既然這個背景是預設的,我們就需要根據不同的需求來改變它,這也是開發中常常實用的,下面我們看看怎麼修改它。
Android中修改Button的背景,需要通過Selector實作,Selector(選擇器)就是一個XML資源檔案,建立方式以Android Studion為例,如下:
1.選擇項目中res->drawable(如果沒有這個檔案夾,需要手動建立)->Drawable resource file2.輸入檔案名稱,點選“OK”![]()
Android學習分享-常見控件02-Button詳解 3.編寫Selector内容,建立的Selector如下:![]()
Android學習分享-常見控件02-Button詳解 ![]()
Android學習分享-常見控件02-Button詳解
如何編寫Selector可能剛開始不知如何下手,我們可以先看看寫好的檔案,看看效果圖,就能看出些規則了,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<solid android:color="@android:color/holo_blue_light"/>
<corners android:radius="10dp"/>
</shape>
</item>
<item android:state_pressed="false">
<shape>
<solid android:color="@android:color/holo_green_light"/>
<corners android:radius="10dp"/>
</shape>
</item>
</selector>
檔案名:selector_btn_bg.xml
Selector寫好之後設定Button屬性
我們就可以看到Button的背景效果,效果圖如下:
我們的按鈕變成了預設時顯示的是綠色,點選之後變成藍色的效果。根據這個效果,我們再來看看Selector的代碼。
1.selector标簽的子标簽是 item标簽,item代表不同狀态下對應着不同資源。例如我們這裡設定了Button的兩個狀态 android:state_pressed=”true”(點選)和android:state_pressed=”false”(未點選),常用的還有state_enabled、state_checked、state_selected等(具體用法我們之後再說)。
2.item标簽下的是shape标簽,shape是一個自定義形狀的工具,比如這個Button背景是一個圓角矩形,我們就可以使用shape來達到效果。 使用shape可以可以定義下面四種類型的形狀,通過android:shape屬性指定:
因為shape預設的是矩形,是以這裡我們沒有定義,我們定義了corners android:radius=”10dp” 代表圓角矩形的圓角是10dp,另外通過solid android:color設定了點選和未點選下的背景色。當然shape不止這幾個屬性,其他的我們後續再講。
- rectangle: 矩形,預設的形狀,可以畫出直角矩形、圓角矩形、弧形等
- oval: 橢圓形,用得比較多的是畫正圓
- line:線形,可以畫實線和虛線
- ring: 環形,可以畫環形進度條
這就是一個基本的Selector和Shape的聯合使用,後面你會發現,使用它們可以讓你的控件變得更加豐富。
2.點選事件的響應
開頭我們就說Button可以響應使用者的點選操作,現在就讓我們看看怎樣實作Button 點選。
先看看效果圖:
不多說,看代碼
第一種方式,代碼如下:
布局檔案 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.liu.button.MainActivity">
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector_btn_bg"
android:layout_margin="10dp"
android:textColor="@android:color/white"
android:layout_centerInParent="true"
android:textSize="16sp"
android:text="點我呀"
android:onClick="click"/>
</RelativeLayout>
MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View v){
Toast.makeText(this,"叫你點就點!!",Toast.LENGTH_SHORT).show();
}
}
代碼比較簡單,分為兩步
1.在Button标簽下添加android:onClick=”click”
2.在Activity添加public void [android:onClick屬性的值](View v)的方法。當你點選按鈕的時候,系統就會調用這個方法了(這裡我們是讓點選按鈕時,彈出Toast,顯示一句話而已)。
注意:
方法的名字必須與Button中android:onClick設定的值相同,而且修飾符必須不能是private,無傳回值,參數清單裡面是View,不符合這些規定的話點選的按鈕無效,甚至程式異常。
第二種方式,布局檔案中Button不寫android:onClick=”click”屬性,隻是Activity中做出了改變,代碼如下:
public class MainActivity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button) findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"叫你點就點!!",Toast.LENGTH_SHORT).show();
}
});
}
}
我們調用findViewById方法,傳入Button的id,得到Button的對象,然後調用setOnClickListener方法為其綁定一個監聽器,重寫其中的onClick方法,當我們點選按鈕,就會執行onClick裡面的代碼。
注意:
我們調用setOnClickListener時需要傳入OnClickListener,它是一個接口,并不是一個類,是以我們不能直接執行個體化。是以我們才要用到匿名内部類的方式使用它,或者你也可以建立一個類實作OnclickListener,接着執行個體化這個實作類,将其傳入方法也行。
第三種方式,這種方式其實是在第二種的了解上做了一些寫法上的改變,改動的依然是Activity,代碼如下:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button) findViewById(R.id.btn);
button.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Toast.makeText(this,"叫你點就點!!",Toast.LENGTH_SHORT).show();
}
我們同樣是調用setOnClickListener方法,隻不過傳入的是目前的Activity對象(我們事先讓它實作OnClickListener接口了),是以達到方法二同樣的效果。
總結
這幾種寫法都能實作同樣的效果,用哪一種憑個人喜好。
個人第一種雖然代碼量相對少,但是當頁面按鈕多的時候,代碼變得不适合閱讀,是以我并不是很推薦(隻是個人看法,不喜勿噴)。
關于Button基礎的知識,大概就是這些,更深入的知識以後自然會深入了解。