第九讲:用户界面 View(四)
本讲内容:Button TextView EditView CheckBox RadioGroup ImageView ImageButton
一、Button 按钮
按钮是程序中最常见的一个元素,我们通过一个例子感受一下,代码的讲解都写在注释里了,所以我就直接上代码和代码的运行结果。
01 |
package android.basic.lesson9; |
03 |
import android.app.Activity; |
04 |
import android.os.Bundle; |
05 |
import android.view.View; |
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); |
19 |
OnClickListener listener = new Button.OnClickListener(){ |
21 |
public void onClick(View v) { |
22 |
setTitle( "您的答案是:" +((TextView)v).getText()); |
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.android.com/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" > |
再下面就是运行效果: 点击某个按钮之后,标题栏发生变化:
我们可以留意到 OnClickListener 是View的一个内部接口,也留意到想更改某个Activity的标题栏,可以用setTitle的方法直接设置。 如果看源代码的话我们也可以留意到Button是我们下面要讲的TextView的子类,对句话你有个印象就行了。
二、TextView 文本框
我们在很早以前的例子里已经开始使用,TextView这个组件,足可见他应用之广泛。它的用处就是显示文本,它也是最基本的一个视图组件。我们有必要看一下TextView的继承关系:
从上图看到Button、EditText、CheckBox、RadioButton等等常用组件都是TextView的直接子类或间接子类,因此我们本讲里TextView内容虽然不多,但是这个组件大家还是要处处留意,逐步加深对TextView类的理解。
下面我们举一个例子,来看一下TextView,并认识一下使用setMovementMethod()方法实现文本可滚动,下面看代码:
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.android.com/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" > |
长长的关于冯诺依曼的文本我就不粘贴了,它定义在strings.xml文件里。下面是显示效果:
我们知道在TextView外层套一个ScrollView也可以实现文本滚动的,同学们自己可以实现一下,然后对比其显示效果有何不同(某一个带滚动条)。
三、EditView 可编辑文本框
我们通过一个例子来介绍一下EditView。
1、新建一个项目,在main.xml中添加一个EditText。
android:text=""
android:id="@+id/EditText01"
android:hint="随便输点什么然后按回车"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
其中,android:hint属性就是没有输入内容之前的提示内容,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){ |
10 |
Toast.makeText(MainHelloEditView. this , et.getText(), |
11 |
Toast.LENGTH_SHORT).show(); |
3、运行程序,输入一些文字之后按回车键看看效果:
有兴趣的同学可以把toast后面的return true换成 return false看看效果,再按OK键呼出软键盘试试。
四、ImageView 图片框,ImageButton 图片按钮
我们通过一个例子来看一下ImageView和ImageButton的应用。
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); |
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(), "点击" +((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.android.com/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" > |
运行效果:
通过这个例子大家可以体会一下OnTouch和OnClick事件之间的区别。
五、CheckBox 选择框
我们也是使用一个例子来演示选择框,请在这里例子里留意 onClickListener和onCheckedChangeListener的区别
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.android.com/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 = "已失去" > |
运行效果如下图,点击选择和取消选择都会触发事件,做出消息提示,请留意之间的异同。
六、RadioGroup and RadioButton 单选组和单选钮
在这一小节里,我们创建一个RadioGroup组件和他的两个子元素RadioButton,实现单选效果。
1、新建一个项目,打开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.android.com/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 = "蓝" > |
7 |
radiobutton > radiogroup > linearlayout > |
添加android:checked=”true”可以做一个默认选中项,如果不增加的话默认都不是选中状态。(读者可以试一下两个单选钮都设置了选中状态时,会有什么结果,思考一下为什么是这样。)
2、在Acticity里处理一下点击事件:
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、运行程序,查看结果:
本讲内容比较多,例子也比较多,大家可以多做练习来加深理解和提高熟练度,并留意一些常用属性的设置。
这节课就到这里吧。
原文地址:http://android.yaohuiji.com/archives/386