JAVA学习 四(对话框)

加入对话框
我们的程序主功能已经完成了,现在我们要试着让它看起来更像一个完整的应用程序。
接下来的几章,我们要为"BMI"应用程序加上一个选单。选单里面有一个"关于.."选 项 。
按下"关于..."选项后,会弹出一个对话框,里面会显示"BMI"程序的相关讯息。
本章中将先学习如何处理对话框。
在本章中,我们要产生一个应用程序中常见的"关于"页面。 应用程序的"关于"页面中,
通常要包含版本讯息、作者、联络方式、首页等资讯。
我们的"关于"页面将以弹出对话框的方式表现。所需要做的,是撰写负责处理对话框的
"openOptionsDialog"函式,并将之附加在原本应用程序 中"calcBMI"这个按钮元件的
"OnClickListener"方法上。当我们按下 "计算 BMI 值"按钮时,即弹出对话框。
等我们学会了对话框的写法,在接下来学习 Android 选单的章节中,我们会改将对话
框函式放入选单中。
对话框中所能显示的内容千变万化。对 Android 来说,对话框也是一种显示内容
(View)。与一般全页面显示的不同之处,在于对话框会重叠显示到原本的呼叫页面上,而且
在对话框的主要显示内容下方,可 能还会再附加上几个按钮,用以回到原页面,或是用来
执行其他的动作。
要在 Android 程序中呼叫一个对话框,有二个主要步骤:
# 定义呼叫点 # 实作对话框
定义呼叫点
修改"Bmi.java"
:
代码:
Bmi.java
1 private OnClickListener calcBMI = new OnClickListener()
2 {
3
public void onClick(View v)
4
{
.
....
6
}else{
7
view_suggest.setText(R.string.advice_average);
8
}
9
openOptionsDialog();
我们在"calcBMI"函式的尾端加入一行"openOptionsDialog();",用以在每次计算完 BMI
值并显示建议后,顺便呼叫"关于"对话框。
实作对话框
紧接着"calcBMI"这个"OnClickListener"函式之后,我们实际开始撰写对话框函式。
:
代码:
private void openOptionsDialog() {
new AlertDialog.Builder(Bmi.this)
.setTitle("关于 Android BMI")
.setMessage("Android BMI Calc")
.show();
我们来分析这个对话框程序。
首先,显示一个最基本的对话框所需的程序码如下。
:
代码:
new AlertDialog.Builder(Bmi.this).show()
我们建立了一个 AlertDialog 对话框类别实体,AlertDialog 呼叫 Builder 方法来预备对
应的界面元件。最后使用 show() 方法来将对话框显示在屏幕上。
透过
:
代码:
.setTitle("关于 Android BMI")
我们设定了对话框的标题。
透过
:
代码:
.setMessage("Android BMI Calc")
我们设定了对话框的主要内容。
重构
我们把其中用到的字串抽取出来,整理到"res/values/strings.xml"中。
res/values/strings.xml
:
代码:
<?xml version="1.0" encoding="utf-8"?>
<resources>
....
<string name="about_title">关于 Android BMI</string>
<string name="about_msg">Android BMI Calc/n
作者 gasolin/n/n
gasolin+android [at] gmail.com</string>
....
</resources>
于是 openOptionsDialog 函式变成这样:
:
代码:
private void openOptionsDialog() {
new AlertDialog.Builder(Bmi.this)
.setTitle(R.string.about_title)
.setMessage(R.string.about_msg)
.show();
打开模拟器,在按下按钮后,我们看到计算出 BMI 值的同时,屏幕上也弹出了一个有
标题的对话框。
加入按钮
目前的对话框中,并没有提供离开对话框的方法。所以我们得按下 "Undo"按钮来离开
对话框,有点不便,所以我们来为这个对话框加入一个"确认"按钮。
:
代码:
.setPositiveButton("确认",
new DialogInterface.OnClickListener(){
public void onClick(
DialogInterface dialoginterface, int i){
}
})
"setPositiveButton"、"setNegativeButton" 或 "setNeutralButton" 函式都可以用
来定义按钮,各按钮分别预设代表正面/中立/负面的结果。
上方程序码中定义的"setPositiveButton"里,包含了一个没有作用的对话框界面
(DialogInterface)。 表示当我们按下按钮时,不做任何事就直接退出对话框。
完整对话框函式的程序码如下
代码:
private void openOptionsDialog() {
new AlertDialog.Builder(Bmi.this)
.setTitle(R.string.about_title)
.setMessage(R.string.about_msg)
.setPositiveButton(R.string.ok_label,
new DialogInterface.OnClickListener(){
public void onClick(
DialogInterface
dialoginterface, int i){
}
})
.show();
}
}
更详细的对话框使用可参考官方文件 http://code.google.com/android/referenc ...
ilder.html
顺道一提 -"Toast "界面元件
对话框的使用模式,限制了使用者得按下某些按键以跳出对话框,才能继续使用原本程
序。如果我们只是要显示一小段提示讯息,而不想打扰使用者的注意力,有没有 更适合的
方法哩? 有的,我们可以把显示方式比较有弹性的对话框拿掉,改为使用简单的 "Toast "
界面元件。"Toast "界面元件的作用是弹出一个讯息框,快速在屏幕上显示一小段讯息。
程序码如下:
:
代码:
import android.widget.Toast;
...
private void openOptionsDialog() {
Toast.makeText(Bmi.this, "BMI 计算器", Toast.LENGTH_SHORT).show();
/*new AlertDialog.Builder(this) //注解掉原本的对话框
...
*/
}
打开模拟器。我们按下"计算 BMI 值"按钮后,屏幕上不再出现一个对话框,而改成弹
出一段"BMI 计算器"文字讯息,过几秒之后即自动隐去。
整段程序值得注意的一行是
:
代码:
Toast.makeText(Bmi.this, "BMI 计算器", Toast.LENGTH_SHORT).show();
我们对 Toast 元件指定了欲显示文字,与 Toast 元件的显示时间长短
(LENGTH_SHORT,即短讯息),最后与处理对话框一样,呼叫 "show() "方法来将 Toast 元
件显示在屏幕上。
错误处理
解决出错最好的方式就是阻止它们的发生。
虽然在当前的程序中,我们似乎用不到 Toast 元件。不过,其实我们还是可以巧妙地
运用它。
使用者在输入资料时,难免会出错。而现在我们写好的 BMI 程序中,并没有对使用者
可能的输入错误做处理。
因此在下面的程序改进中,我们使用了 try...catch 语句,与 Toast 元件来做错误处理。
:
代码:
DecimalFormat nf = new DecimalFormat("0.00");
try{
double height = Double.parseDouble(field_height.getText().toString())/100;
double weight = Double.parseDouble(field_weight.getText().toString());
double BMI = weight / (height * height);
//Present result
view_result.setText(getText(R.string.bmi_result) + nf.format(BMI));
//Give health advice
if(BMI>25){
view_suggest.setText(R.string.advice_heavy);
}else if(BMI<20){
view_suggest.setText(R.string.advice_light);
}else{
view_suggest.setText(R.string.advice_average);
}
}
catch(Exception err)
{
Toast.makeText(Bmi.this, "打错了吗?只能输入数字喔",
Toast.LENGTH_SHORT).show();
}
讲解
Try
{
主要程序流程
}
catch(Exception err)
{
错误处理流程
}
try...catch 语句是 Java 语言的错误处理语句。首先将 "主要的程序流程"包在 try 语句
的两个大括号中执行,如果执行正常,就跳过 catch 语句,继续执行后续的语句。旦是如
果在 try 语句中执行的流程出现错误了,那麽程序流程就会从 try 语句跳到对应的 catch
语句,并开始执行对应的 catch 语句大括号中的"错误处理流程"。
在我们的 BMI 程序中,catch 语句大括号中的"错误处理流程",是简单地在屏幕上显
示一串提示使用者输入错了,应该输入数字的讯息。
:
代码:
Toast.makeText(Bmi.this, "打错了吗?只能输入数字喔", Toast.LENGTH_SHORT).show();
需要在屏幕上显示一串提示时,就是 Toast 元件派上用场的地方。除了所显示的字串
不同之外,整段程序与上一节相同。
重构
为了更好地重用,我们继续把字串提取到"res/values/strings.xml"中
:
代码:
....
<string name="input_error">打错了吗?只能输入数字喔</string>
</resources>
然后在程序中使用"R.string.input_error"来取得字串
:
代码:
Toast.makeText(Bmi.this, R.string.input_error, Toast.LENGTH_SHORT).show();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值