本講內(nèi)容:Button TextView EditView CheckBox RadioGroup ImageView ImageButton
一、Button 按鈕
按鈕是程序中最常見的一個(gè)元素,我們通過一個(gè)例子感受一下,代碼的講解都寫在注釋里了,所以我就直接上代碼和代碼的運(yùn)行結(jié)果。
01 | package android.basic.lesson9; |
03 | import android.app.Activity; |
04 | import android.os.Bundle; |
05 | import android.view.View; |
06 | //不熟悉內(nèi)部類的朋友可以留意一下這里的導(dǎo)入方式 |
07 | import android.view.View.OnClickListener; |
08 | import android.widget.Button; |
09 | import android.widget.TextView; |
11 | public class MainHelloButton extends Activity { |
12 | /** Called when the activity is first created. */ |
14 | public void onCreate(Bundle savedInstanceState) { |
15 | super .onCreate(savedInstanceState); |
16 | setContentView(R.layout.main); |
18 | //實(shí)現(xiàn)一個(gè)多按鈕可用的單擊監(jiān)聽器對象 |
19 | OnClickListener listener = new Button.OnClickListener(){ |
21 | public void onClick(View v) { |
22 | setTitle( "您的答案是:" +((TextView)v).getText()); |
26 | //為界面中的每個(gè)按鈕綁定上這個(gè)單擊監(jiān)聽器 |
27 | findViewById(R.id.Button01).setOnClickListener(listener); |
28 | findViewById(R.id.Button02).setOnClickListener(listener); |
29 | findViewById(R.id.Button03).setOnClickListener(listener); |
下面是布局文件:
01 | <? xml version = "1.0" encoding = "utf-8" ?> |
02 | < linearlayout android:layout_height = "fill_parent" android:layout_width = "fill_parent" android:gravity = "center" android:orientation = "vertical" xmlns:android = "http://schemas./apk/res/android" > |
03 | < textview android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:id = "@+id/TextView01" android:text = "杜鵑不啼,如何讓它啼?" android:textsize = "20sp" android:layout_marginbottom = "10dp" > |
06 | < button android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:id = "@+id/Button01" android:text = "殺之不足惜!" android:textsize = "20sp" > |
09 | < button android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:id = "@+id/Button02" android:text = "誘之自然啼!" android:textsize = "20sp" > |
12 | < button android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:id = "@+id/Button03" android:text = "待之莫須急!" android:textsize = "20sp" > |
再下面就是運(yùn)行效果: 點(diǎn)擊某個(gè)按鈕之后,標(biāo)題欄發(fā)生變化:
我們可以留意到 OnClickListener 是View的一個(gè)內(nèi)部接口,也留意到想更改某個(gè)Activity的標(biāo)題欄,可以用setTitle的方法直接設(shè)置。 如果看源代碼的話我們也可以留意到Button是我們下面要講的TextView的子類,對句話你有個(gè)印象就行了。
二、TextView 文本框
我們在很早以前的例子里已經(jīng)開始使用,TextView這個(gè)組件,足可見他應(yīng)用之廣泛。它的用處就是顯示文本,它也是最基本的一個(gè)視圖組件。我們有必要看一下TextView的繼承關(guān)系:
從上圖看到Button、EditText、CheckBox、RadioButton等等常用組件都是TextView的直接子類或間接子類,因此我們本講里TextView內(nèi)容雖然不多,但是這個(gè)組件大家還是要處處留意,逐步加深對TextView類的理解。
下面我們舉一個(gè)例子,來看一下TextView,并認(rèn)識一下使用setMovementMethod()方法實(shí)現(xiàn)文本可滾動,下面看代碼:
01 | package android.basic.lesson9; |
03 | import android.app.Activity; |
04 | import android.os.Bundle; |
05 | import android.text.method.ScrollingMovementMethod; |
06 | import android.widget.TextView; |
08 | public class HelloTextView extends Activity { |
09 | /** Called when the activity is first created. */ |
11 | public void onCreate(Bundle savedInstanceState) { |
12 | super .onCreate(savedInstanceState); |
13 | setContentView(R.layout.main); |
16 | TextView tv = (TextView)findViewById(R.id.TextView01); |
19 | tv.setMovementMethod(ScrollingMovementMethod.getInstance()); |
main,xml代碼:
1 | <? xml version = "1.0" encoding = "utf-8" ?> |
2 | < linearlayout android:layout_height = "fill_parent" android:layout_width = "fill_parent" android:orientation = "vertical" xmlns:android = "http://schemas./apk/res/android" > |
3 | < textview android:layout_height = "wrap_content" android:layout_width = "fill_parent" android:id = "@+id/TextView01" android:text = "@string/hello" android:textsize = "30sp" > |
4 | </ textview ></ linearlayout > |
長長的關(guān)于馮諾依曼的文本我就不粘貼了,它定義在strings.xml文件里。下面是顯示效果:
我們知道在TextView外層套一個(gè)ScrollView也可以實(shí)現(xiàn)文本滾動的,同學(xué)們自己可以實(shí)現(xiàn)一下,然后對比其顯示效果有何不同(某一個(gè)帶滾動條)。
三、EditView 可編輯文本框
我們通過一個(gè)例子來介紹一下EditView。
1、新建一個(gè)項(xiàng)目,在main.xml中添加一個(gè)EditText。
<EditText
android:text=""
android:id="@+id/EditText01" android:hint="隨便輸點(diǎn)什么然后按回車"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</EditText>
其中,android:hint屬性就是沒有輸入內(nèi)容之前的提示內(nèi)容,hint英文的意思也是暗示之意。
2、在onCreate()方法中添加如下代碼:
02 | final EditText et = (EditText) findViewById(R.id.EditText01); |
03 | et.setOnKeyListener( new View.OnKeyListener() { |
06 | public boolean onKey(View v, int keyCode, KeyEvent event) { |
08 | if (event.getAction()== KeyEvent.ACTION_DOWN && keyCode== KeyEvent.KEYCODE_ENTER){ |
09 | //按住把EditView中的文版顯示在吐司消息中 |
10 | Toast.makeText(MainHelloEditView. this , et.getText(), |
11 | Toast.LENGTH_SHORT).show(); |
12 | //返回true說明你已經(jīng)處理了這個(gè)事件并且它應(yīng)該就此終止,如果返回false就表示此事件還需要繼續(xù)傳遞下去 |
3、運(yùn)行程序,輸入一些文字之后按回車鍵看看效果:
有興趣的同學(xué)可以把toast后面的return true換成 return false看看效果,再按OK鍵呼出軟鍵盤試試。
四、ImageView 圖片框,ImageButton 圖片按鈕
我們通過一個(gè)例子來看一下ImageView和ImageButton的應(yīng)用。
01 | package android.basic.lesson9; |
03 | import android.app.Activity; |
04 | import android.os.Bundle; |
05 | import android.view.MotionEvent; |
06 | import android.view.View; |
07 | import android.view.View.OnClickListener; |
08 | import android.view.View.OnTouchListener; |
09 | import android.widget.ImageButton; |
10 | import android.widget.ImageView; |
11 | import android.widget.Toast; |
13 | public class MainHelloImageButton extends Activity { |
14 | /** Called when the activity is first created. */ |
16 | public void onCreate(Bundle savedInstanceState) { |
17 | super .onCreate(savedInstanceState); |
18 | setContentView(R.layout.main); |
20 | // 找到xml中的ImageButton和ImageView |
21 | final ImageButton ib = (ImageButton) findViewById(R.id.ImageButton01); |
22 | final ImageView iv = (ImageView) findViewById(R.id.ImageView01); |
25 | OnTouchListener otl = new OnTouchListener() { |
27 | public boolean onTouch(View v, MotionEvent event) { |
29 | case R.id.ImageButton01: |
30 | Toast.makeText(getApplicationContext(), "觸摸" +((ImageView)v).getId(), |
31 | Toast.LENGTH_LONG).show(); |
33 | case R.id.ImageView01: |
34 | Toast.makeText(getApplicationContext(), "觸摸" +((ImageView)v).getId(), |
35 | Toast.LENGTH_LONG).show(); |
43 | OnClickListener ocl = new OnClickListener() { |
45 | public void onClick(View v) { |
46 | Toast.makeText(getApplicationContext(), "點(diǎn)擊" +((ImageView)v).getId(), |
47 | Toast.LENGTH_LONG).show(); |
52 | ib.setOnClickListener(ocl); |
53 | ib.setOnTouchListener(otl); |
54 | iv.setOnClickListener(ocl); |
55 | iv.setOnTouchListener(otl); |
main.xml配置:
1 | <? xml version = "1.0" encoding = "utf-8" ?> |
2 | < linearlayout android:layout_height = "fill_parent" android:layout_width = "fill_parent" android:gravity = "center" android:orientation = "vertical" xmlns:android = "http://schemas./apk/res/android" > |
4 | < imagebutton android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:id = "@+id/ImageButton01" android:layout_marginbottom = "10dp" android:src = "@drawable/android_normal" > |
6 | < imageview android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:id = "@+id/ImageView01" android:src = "@drawable/android_normal" > |
運(yùn)行效果:
通過這個(gè)例子大家可以體會一下OnTouch和OnClick事件之間的區(qū)別。
五、CheckBox 選擇框
我們也是使用一個(gè)例子來演示選擇框,請?jiān)谶@里例子里留意 onClickListener和onCheckedChangeListener的區(qū)別
01 | package android.basic.lesson9; |
03 | import android.app.Activity; |
04 | import android.os.Bundle; |
05 | import android.view.View; |
06 | import android.view.View.OnClickListener; |
07 | import android.widget.Button; |
08 | import android.widget.CheckBox; |
09 | import android.widget.CompoundButton; |
10 | import android.widget.CompoundButton.OnCheckedChangeListener; |
11 | import android.widget.Toast; |
13 | public class MainHelloCheckBox extends Activity { |
14 | /** Called when the activity is first created. */ |
16 | public void onCreate(Bundle savedInstanceState) { |
17 | super .onCreate(savedInstanceState); |
18 | setContentView(R.layout.main); |
21 | final CheckBox cb1 = (CheckBox) findViewById(R.id.CheckBox01); |
22 | final CheckBox cb2 = (CheckBox) findViewById(R.id.CheckBox02); |
25 | OnClickListener ocl = new OnClickListener() { |
28 | public void onClick(View v) { |
29 | if (!((CheckBox)v).isChecked()){ |
30 | Toast.makeText(MainHelloCheckBox. this , "\"" +((Button)v).getText()+ "\"被取消" , |
31 | Toast.LENGTH_SHORT).show(); |
36 | OnCheckedChangeListener occl = new OnCheckedChangeListener() { |
39 | public void onCheckedChanged(CompoundButton buttonView, |
42 | Toast.makeText(MainHelloCheckBox. this , "\"" +buttonView.getText()+ "\"被選擇" , |
43 | Toast.LENGTH_SHORT).show(); |
49 | cb1.setOnCheckedChangeListener(occl); |
50 | cb2.setOnCheckedChangeListener(occl); |
51 | cb1.setOnClickListener(ocl); |
52 | cb2.setOnClickListener(ocl); |
main.xml的代碼:
1 | <? xml version = "1.0" encoding = "utf-8" ?> |
2 | < linearlayout android:layout_height = "fill_parent" android:layout_width = "fill_parent" android:orientation = "vertical" xmlns:android = "http://schemas./apk/res/android" > |
3 | < textview android:layout_height = "wrap_content" android:layout_width = "fill_parent" android:id = "@+id/TextView01" android:text = "選擇你想得到的東西:" > |
4 | < checkbox android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:id = "@+id/CheckBox01" android:text = "得不到" > |
6 | < checkbox android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:id = "@+id/CheckBox02" android:text = "已失去" > |
8 | </ textview ></ linearlayout > |
運(yùn)行效果如下圖,點(diǎn)擊選擇和取消選擇都會觸發(fā)事件,做出消息提示,請留意之間的異同。
六、RadioGroup and RadioButton 單選組和單選鈕
在這一小節(jié)里,我們創(chuàng)建一個(gè)RadioGroup組件和他的兩個(gè)子元素RadioButton,實(shí)現(xiàn)單選效果。
1、新建一個(gè)項(xiàng)目,打開res/layout/main.xml 添加如下代碼:
1 | <? xml version = "1.0" encoding = "utf-8" ?> |
2 | < linearlayout android:layout_height = "fill_parent" android:layout_width = "fill_parent" android:orientation = "vertical" xmlns:android = "http://schemas./apk/res/android" > |
3 | < radiogroup android:layout_height = "wrap_content" android:layout_width = "fill_parent" android:orientation = "vertical" > |
4 | < radiobutton android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:id = "@+id/radio_red" android:text = "紅" > |
5 | < radiobutton android:layout_height = "wrap_content" android:layout_width = "wrap_content" android:id = "@+id/radio_blue" android:text = "藍(lán)" > |
6 | </ radiobutton ></ radiobutton ></ radiogroup > |
添加android:checked=”true”可以做一個(gè)默認(rèn)選中項(xiàng),如果不增加的話默認(rèn)都不是選中狀態(tài)。(讀者可以試一下兩個(gè)單選鈕都設(shè)置了選中狀態(tài)時(shí),會有什么結(jié)果,思考一下為什么是這樣。)
2、在Acticity里處理一下點(diǎn)擊事件:
01 | package android.basic.lesson9; |
03 | import android.app.Activity; |
04 | import android.os.Bundle; |
05 | import android.view.View; |
06 | import android.view.View.OnClickListener; |
07 | import android.widget.RadioButton; |
08 | import android.widget.Toast; |
10 | public class MainHelloRadioGroup extends Activity { |
11 | /** Called when the activity is first created. */ |
13 | public void onCreate(Bundle savedInstanceState) { |
14 | super .onCreate(savedInstanceState); |
15 | setContentView(R.layout.main); |
17 | final RadioButton radio_red = (RadioButton) findViewById(R.id.radio_red); |
18 | final RadioButton radio_blue = (RadioButton) findViewById(R.id.radio_blue); |
20 | OnClickListener ocl = new OnClickListener() { |
23 | public void onClick(View v) { |
24 | Toast.makeText(MainHelloRadioGroup. this , ((RadioButton)v).getText(), Toast.LENGTH_SHORT).show(); |
29 | radio_red.setOnClickListener(ocl); |
30 | radio_blue.setOnClickListener(ocl); |
3、運(yùn)行程序,查看結(jié)果:
本講內(nèi)容比較多,例子也比較多,大家可以多做練習(xí)來加深理解和提高熟練度,并留意一些常用屬性的設(shè)置。
這節(jié)課就到這里吧。
|