




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
史上超豪华的手机控件范例说明EditText Widget的设计是为了等待User输入而准备的,那么在User输入的同时,又该如何拦截所输入的文字呢?Android的多数Widget都有setOnKeyListener事件,以此Listener捕捉User输入的键盘事件。接着,本范例将以EditText与TextView示范如何在捕捉User键盘输入文字的同时,实时取得文字,同步显示于TextView,类似手机版的Ajax效果,实时输入实时输出。运行结果图4-1 在EditText输入的数据,立即出现在TextView里面范例程序src/irdc.ex04_01/EX04_01.java主程序中唯一也是关键之处,便是利用EditText.OnKeyListener来拦截EditText的键盘输入事件,仅需在其中重写onKey() 方法,在onKey() 方法中,将EditText.getText() 取出的文字,显示于TextView当中,是一个简单易懂的范例练习。package irdc.ex04_01;import android.app.Activity;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.widget.EditText;import android.widget.TextView;public class EX04_01 extends Activity /*声明 TextView、EditText对象*/ private TextView mTextView01; private EditText mEditText01; /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); /*取得TextView、EditText*/ mTextView01 = (TextView)findViewById(R.id.myTextView); mEditText01 = (EditText)findViewById(R.id.myEditText); /*设置EditText用OnKeyListener事件来启动*/ mEditText01.setOnKeyListener(new EditText.OnKeyListener() Override public boolean onKey(View arg0, int arg1, KeyEvent arg2) / TODO Auto-generated method stub /*设置TextView显示EditText所输入的内容*/ mTextView01.setText(mEditText01.getText(); return false; );延伸学习这个实时输入实时显示的效果可以扩展在许多手机应用程序中,可以试着在OnKeyListener() 里做实时文字过滤效果,例如:当User输入不雅的文字时,可以提示User不接受部分关键字,以输入Shit为例,在TextView就会出现:Sh*t,此种做法可以过滤掉不雅文字的出现。此外,不仅是Widget才有setOnKeyListener方法可以重写,事实上,在View里也有View.setOnKeyListener,也就是捕捉User点击键盘时的事件处理,但请特别注意,需拦截这个事件,即View要取得焦点(Focus)才能触发onKeyDown 事件。最后提醒你,旧版本当中的View.setKeyListener类已经被删除,1.0r2版之后,已经改用View.setOnKeyListener() 方法替换。范例说明延续前一章按钮事件的应用范例,重新设计一个具有背景图的按钮,让按钮有美观的背景图片,只是这次不使用先前的Button Widget,而是改以ImageButton Widget来显示。将按钮背景图预先Import至Drawable里(*.png图形文件),利用这些图片,作为ImageButton的背景图,为了做对照,在Layout配置一个“一般按钮”,运行结果画面中,可以明显看出图片按钮与一般按钮在外观上的差异。要设置ImageButton背景图有许多方法,此程序使用的方法是ImageButton.setImageResource(),需要传递的参数即是res/drawable/ 下面的Resource ID,除了设置背景图片的方法外,程序需要用到onFocusChange与onClick等按钮事件作为按钮事件点击之后的处理,最后通过TextView来显示目前图片按钮的状态为onClick、onFocus,或offFocus,并且同步更新按钮的背景图,让User有动态交互的感觉。运行结果图4-2 随着Focus与Click 动作,画面上的图片与文字会告知你目前图片按钮的状态范例程序src/irdc.ex04_02/EX04_02.java主程序构造三个对象ImageButton、Button与TextView,并在ImageButton上设置onFocusChangeListener与onClickListener,并实现Image Button图片的置换。ImageButton.setOnFocusChangeListener() 是处理User点击图片按钮之后需要处理的关键,当点击图片按钮的瞬间,以ImageButton.setImageResource() 来更换背景图片。package irdc.EX04_02;import android.app.Activity;import android.os.Bundle;import android.view.View;/*使用OnClickListener与OnFocusChangeListener来区分按钮的状态*/import android.view.View.OnClickListener;import android.view.View.OnFocusChangeListener;import android.widget.Button;import android.widget.ImageButton;import android.widget.TextView;public class EX04_02 extends Activity /*声明三个对象变量(图片按钮,按钮,与TextView)*/ private ImageButton mImageButton1; private Button mButton1; private TextView mTextView1; /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); /*通过findViewById构造三个对象*/ mImageButton1 =(ImageButton) findViewById(R.id.myImageButton1); mButton1=(Button)findViewById(R.id.myButton1); mTextView1 = (TextView) findViewById(R.id.myTextView1); /*通过OnFocusChangeListener来响应ImageButton的onFous事件*/ mImageButton1.setOnFocusChangeListener(new OnFocusChangeListener() public void onFocusChange(View arg0, boolean isFocused) / TODO Auto-generated method stub /*若ImageButton状态为onFocus改变ImageButton的图片 * 并改变textView的文字*/ if (isFocused=true) mTextView1.setText(图片按钮状态为:Got Focus); mImageButton1.setImageResource(R.drawable.iconfull); /*若ImageButton状态为offFocus改变ImageButton的图片 *并改变textView的文字*/ else mTextView1.setText(图片按钮状态为:Lost Focus); mImageButton1.setImageResource(R.drawable.iconempty); ); /*通过onClickListener来响应ImageButton的onClick事件*/ mImageButton1.setOnClickListener(new OnClickListener() public void onClick(View v) / TODO Auto-generated method stub /*若ImageButton状态为onClick改变ImageButton的图片 * 并改变textView的文字*/ mTextView1.setText(图片按钮状态为:Got Click); mImageButton1.setImageResource(R.drawable.iconfull); ); /*通过onClickListener来响应Button的onClick事件*/ mButton1.setOnClickListener(new OnClickListener() public void onClick(View v) / TODO Auto-generated method stub /*若Button状态为onClick改变ImageButton的图片 * 并改变textView的文字*/ mTextView1.setText(图片按钮状态为:Lost Focus); mImageButton1.setImageResource(R.drawable.iconempty); ); 扩展学习除了在运行时用onFocus() 与onClick() 事件来设置按钮背景图片外,Android的MVC设计理念,可以让程序运行之初就以xml定义的方式来初始化ImageButton的背景图,仅需先将图片导入res/drawable。设置方法为在res/drawable下自行定义一个xml,主要针对按钮的state_focused、state_pressed与drawable属性作设置,如下所示:drawable/advancedbutton.xml 然后,在main.xml中将advancedbutton赋值给Button组件中background的属性。layout/main.xml如此一来,即可达到如同本范例程序所展示的效果。范例说明Toast是Android专属的提示小对象,它的使用方式相当简单,但用途却很广泛,基本上,Toast就是一个简短的小信息,将要告诉用户的信息,以一个浮动在最上层的View显示,显示Toast之后,静待几秒后便会自动消失,最常见的应用就是音量大小的调整,当点击音量调整钮之后,会看见跳出的音量指示Toast对象,等待调整完之后便会消失。通过Toast的特性,可以在不影响用户通话或聆听音乐情况下,显示要给User的信息。对于程序员来说,它也是一个非常好用的debug工具,可以在任何程序运行时,通过Toast的方式,显示运行变量或手机环境的概况。本范例使用一个EditText控件来接受用户输入的文字,以及配置Button按钮Widget,点击按钮时,将EditText里的文字,以Toast.makeText()的方法让文字显示于Toast对象中,这段文字会在显示一段时间后自动消失,读者可借此体验一下Toast对象的使用与显示。运行结果图4-3 在EditText字段中填写文字,点击按钮送出后,会发出Toast信息范例程序src/irdc.ex04_03/EX04_03.java主程序需要构建两个控件EditText与Button,在Button的onClick() 方法中使用Toast对象的makeText() 方法来显示输入的文字。package irdc.EX04_03;import android.app.Activity;import android.os.Bundle;import android.text.Editable;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class EX04_03 extends Activity /* Called when the activity is first created. */ /*声明两个对象变量(按钮与编辑文字)*/ private Button mButton; private EditText mEditText; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); /*通过findViewById()取得对象 */ mButton=(Button)findViewById(R.id.myButton); mEditText=(EditText)findViewById(R.id.myEditText); /*设置onClickListener给Button对象聆听onClick事件*/ mButton.setOnClickListener(new OnClickListener() Override public void onClick(View v) / TODO Auto-generated method stub /*声明字符串变量并取得用户输入的EditText字符串*/ Editable Str; Str=mEditText.getText(); /*使用系统标准的 makeText()方式来产生Toast信息*/ Toast.makeText( EX04_03.this, 你的愿望 +Str.toString()+已送达耶诞老人信箱, Toast.LENGTH_LONG).show(); /*清空EditText*/ mEditText.setText(); ); 扩展学习Toast显示后会在一定时间内消失,在Toast构造参数中的第二个参数为显示的时间常数,可设置为LENGTH_LONG或LENGTH_SHORT,前者提示时间较长,后者较短,作为传递makeText() 方法的参数使用。当然,你也可以使用重写Toast对象的方法,自定义Toast显示的Layout,以不同于系统内置的方式显示客制化的Toast对象,如要在Toast里显示图片(Drawable),方式如下:Toast mToast01 = new Toast(this);ImageView mView01 = new ImageView(this);mView01.setImageResource(R.drawable.icon);mToast01.setView(mView01);mToast01.show();或显示自定义的Layout Widget(如TextView),则写法如下:Toast mToast01 = new Toast(this);TextView mView01=new TextView(this);mView01.setText(ToastWords);mToast01.setView(mView01);mToast01.show();或者通过AlertDialog.Builder来创建类似Toast的信息对象,读者可以实现看看,比较两者有何不同:AlertDialog mADialog01 =new AlertDialog.Builder(this)mADialog01.setTitle(Android 提示);mADialog01.setMessage(this is a message);mADialog01.show();范例说明所有的网络服务在User使用之前,都需要签署同意条款,在手机应用程序、手机游戏的设计经验中,常看见CheckBox在同意条款情境的使用,其选取的状态有两种isChecked=true与isChecked=false。以下范例将设计一个TextView放入条款文字,在下方配置一个CheckBox Widget作为选取项,通过Button.onClickListener按钮事件处理,取得User同意条款的状态。当CheckBox.isChecked为true,更改TextView的文字内容为“你已接受同意!!”,当未选取CheckBox时,Button是不可以选择的(被Disabled)。运行结果图4-4 未勾选“我同意”时,“确定”按钮是不可以按的范例程序src/irdc.ex04_04/EX04_04.java利用CheckBox.OnClickListener里的事件来判断Button该不该显示,其方法就是判断Button.Enabled的值;在一开始时,默认参数为false,当有点击CheckBox时,Button参数就修改为true。package irdc.ex04_04;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.CheckBox;import android.widget.TextView;public class EX04_04 extends Activity /* Called when the activity is first created. */ /*声明 TextView、CheckBox、Button对象*/public TextView myTextView1; public TextView myTextView2; public CheckBox myCheckBox; public Button myButton; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); /*取得TextView、CheckBox、Button*/ myTextView1 = (TextView) findViewById(R.id.myTextView1); myTextView2 = (TextView) findViewById(R.id.myTextView2); myCheckBox = (CheckBox) findViewById(R.id.myCheckBox); myButton = (Button) findViewById(R.id.myButton); /*将CheckBox、Button默认为未选择状态*/ myCheckBox.setChecked(false); myButton.setEnabled(false); myCheckBox.setOnClickListener(new CheckBox.OnClickListener() Override public void onClick(View v) / TODO Auto-generated method stub if(myCheckBox.isChecked() /*设置Button为不能选择对象*/ myButton.setEnabled(true); myTextView2.setText(); else /*设置Button为可以选择对象*/ myButton.setEnabled(false); myTextView1.setText(R.string.text1); /*在TextView2里显示出请勾选我同意*/ myTextView2.setText(R.string.no); ); myButton.setOnClickListener(new Button.OnClickListener() Override public void onClick(View v) / TODO Auto-generated method stub if(myCheckBox.isChecked() myTextView1.setText(R.string.ok); else ); 扩展学习CheckBox在默认内容为空白时(没有任何默认的提示文字下),可设置提示User的文字,其调用的方法为CheckBox.setHint() 方法;在扩展学习的范例练习,是抓取R.string.hello这个字符串常数,其与默认CheckBox文字的结果是相同的,试试看:myTextView1 = (TextView) findViewById(R.id.myTextView1);myTextView2 = (TextView) findViewById(R.id.myTextView2);myCheckBox = (CheckBox) findViewById(R.id.myCheckBox);myButton = (Button) findViewById(R.id.myButton);myCheckBox.setChecked(false);/*利用setHIT抓取strings里面的值*/CharSequence hint = getString(R.string.hello);myCheckBox.setHint(hint);/*设置文字颜色*/myCheckBox.setHintTextColor(Color.RED);范例说明你使用消费券了吗?消费券只有3600元,但是想要买的东西却是无穷多()。这个范例程序要示范的是CheckBox.setOnCheckedChangeListener,在程序中设计三个CheckBox核取项,分别表示三种物品列表,当User勾选其中一个物品,就在TextView里显示已选择的物品列表。程序的关键在同时聆听三个CheckBox.OnCheckedChangeListener的状态,并在CheckBox.onChecked() 方法中,重组所有被勾选的物品文字。运行结果图4-5 勾选不同的CheckBox,该CheckBox的文字会在TextView中显示出来范例程序src/irdc.ex04_05/EX04_05.java主程序的重点在于构造三个CheckBox的对象,以及一个TextView对象,并通过setOnCheckedChangeListener实现onCheckedChanged() 方法来更新TextView文字。package irdc.EX04_05;import android.app.Activity;import android.os.Bundle;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.TextView;public class EX04_05 extends Activity /*声明对象变量*/ private TextView mTextView1; private CheckBox mCheckBox1; private CheckBox mCheckBox2; private CheckBox mCheckBox3; /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); /*通过findViewById取得TextView对象并调整文字内容*/ mTextView1 = (TextView) findViewById(R.id.myTextView1); mTextView1.setText(你所选择的项目有: ); /*通过findViewById取得三个CheckBox对象*/ mCheckBox1=(CheckBox)findViewById(R.id.myCheckBox1); mCheckBox2=(CheckBox)findViewById(R.id.myCheckBox2); mCheckBox3=(CheckBox)findViewById(R.id.myCheckBox3); /*设置OnCheckedChangeListener给三个CheckBox对象*/ mCheckBox1.setOnCheckedChangeListener(mCheckBoxChanged); mCheckBox2.setOnCheckedChangeListener(mCheckBoxChanged); mCheckBox3.setOnCheckedChangeListener(mCheckBoxChanged); /*声明并构造onCheckedChangeListener对象*/ private CheckBox.OnCheckedChangeListener mCheckBoxChanged = new CheckBox.OnCheckedChangeListener() /*implement onCheckedChanged方法*/ Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) / TODO Auto-generated method stub /*通过getString()取得CheckBox的文字字符串*/ String str0=所选的项目为: ; String str1=getString(R.string.str_checkbox1); String str2=getString(R.string.str_checkbox2); String str3=getString(R.string.str_checkbox3); String plus=; String result=但是超过预算啰!; String result2=还可以再多买几本喔!; /*任一CheckBox被勾选后,该CheckBox的文字会改变TextView的文字内容 * 三个对象总共八种情境*/ if(mCheckBox1.isChecked()=true & mCheckBox2.isChecked()=true & mCheckBox3.isChecked()=true) mTextView1.setText(str0+str1+plus+str2+plus+str3+result); else if(mCheckBox1.isChecked()=false & mCheckBox2.isChecked()=true & mCheckBox3.isChecked()=true) mTextView1.setText(str0+str2+plus+str3+result); else if(mCheckBox1.isChecked()=true & mCheckBox2.isChecked()=false & mCheckBox3.isChecked()=true) mTextView1.setText(str0+str1+plus+str3+result); else if(mCheckBox1.isChecked()=true & mCheckBox2.isChecked()=true & mCheckBox3.isChecked()=false) mTextView1.setText(str0+str1+plus+str2+result); else if(mCheckBox1.isChecked()=false & mCheckBox2.isChecked()=false & mCheckBox3.isChecked()=true) mTextView1.setText(str0+str3+plus+result2); else if(mCheckBox1.isChecked()=false & mCheckBox2.isChecked()=true & mCheckBox3.isChecked()=false) mTextView1.setText(str0+str2); else if(mCheckBox1.isChecked()=true & mCheckBox2.isChecked()=false & mCheckBox3.isChecked()=false) mTextView1.setText(str0+str1); else if(mCheckBox1.isChecked()=false & mCheckBox2.isChecked()=false & mCheckBox3.isChecked()=false) mTextView1.setText(str0); ;扩展学习读者可以将OnCheckedChangeListener改为OnTouchListener(屏幕触控事件),方法如下:private CheckBox.OnTouchListener mCheckBoxTouch =new CheckBox.OnTouchListener() Override public boolean onTouch(View v, MotionEvent event) / TODO Auto-generated method stub /* 判断在触控笔指压此控件时的状态 */ if(mCheckBox1.isChecked()=false) /*当触控笔放开后的动作*/ else if(mCheckBox1.isChecked()=true) /*当触控笔压下后的动作*/ return false; ;请试着比较OnCheckedChangeListener与OnTouchListener在使用上的差异。范例说明接下来要介绍的是RadioGroup的组事件。RadioGroup可将各自不同的RadioButton设限于同一个Radio按钮组,同属一个RadioGroup组里的按钮,只能做出单一选择(单选题),虽然前一章曾经介绍过RadioGroup与RadioButton,但当时使用的是Button事件,在此要示范“点击”的同时就运行事件处理,不再需要按钮(Button)的辅助了。先设计一个TextView Widget,以及一个RadioGroup,并于该RadioGroup内放置两个RadioButton,默认为都不选择,在程序运行阶段,利用onCheckedChanged作为启动事件装置,让User选择其中一个按钮时,显示被选择的内容,最后将RadioButton的选项文字显示于TextView当中。运行结果图4-6 点击帅哥或美女按钮的同时,会立即显示事件结果范例程序src/irdc.ex04_06/EX04_06.java利用OnCheckedChangeListener来启动RadioGroup的事件,随后将被勾选的RadioButton(mRadio1.getText())的文字显示于TextView。package irdc.ex04_06;import android.app.Activity;import android.os.Bundle;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.TextView;public class EX04_06 extends Activity public TextView mTextView1; public RadioGroup mRadioGroup1; public RadioButton mRadio1,mRadio2; /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); /*取得 TextView、RadioGroup、RadioButton对象*/ mTextView1 = (TextView) findViewById(R.id.myTextView); mRadioGroup1 = (RadioGroup) findViewById(R.id.myRadioGroup); mRadio1 = (RadioButton) findViewById(R.id.myRadioButton1); mRadio2 = (RadioButton) findViewById(R.id.myRadioButton2); /*RadioGroup用OnCheckedChangeListener来运行*/ mRadioGroup1.setOnCheckedChangeListener(mChangeRadio); private RadioGrou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 通信网络工程项目技术支持人员合作协议书
- 信用卡个人分期还款详细协议
- 数控车工考试试题
- 地热钻井工程地质钻探与成井技术承包合同
- 钢铁行业股权无偿转让与环保责任承担协议
- 2025年无人机行业全球市场竞争分析报告
- 2025年成都零诊考试试题及答案
- 2025劳务合同书(临时工)
- 2025年旅游观光行业智能导览系统应用前景评估报告
- 2025年电竞行业全球电竞市场发展趋势研究报告
- GB/T 23902-2021无损检测超声检测超声衍射声时技术检测和评价方法
- 邀请函模板完整
- 2020新译林版高中英语选择性必修二全册课文及翻译(英汉对照)
- 大学物理第14章光的衍射课件
- 家长会 课件(共44张ppt) 九年级上学期
- 钻孔灌注桩施工安全控制培训教材课件
- 福建省莆田市各县区乡镇行政村村庄村名明细
- 大班幼儿随访电访记录表内有内容
- 干细胞精品课件
- 太阳能路灯说明书完整版
- 中国老龄化社会的潜藏价值(中英)
评论
0/150
提交评论