展会信息港展会大全

在 Android 程式中加入对话框(Dialog)
来源:互联网   发布日期:2015-10-03 11:31:48   浏览:1450次  

导读:我们的程式主功能已经完成了,现在我们要试著让它看起来更像一个完整的应用程式。接下来的几章,我们要為「BMI」应用程式加上一个选单。选单裡面有一个「关於..」选项。按下「关於...」选项后,会弹出一个对话框......

我们的程式主功能已经完成了,现在我们要试著让它看起来更像一个完整的应用程式。

接下来的几章,我们要為「BMI」应用程式加上一个选单。选单裡面有一个「关於..」选项。按下「关於...」选项后,会弹出一个对话框,裡面会显示「BMI」程式的相关讯息。

本章中将先学习如何处理对话框。

在本章中,我们要產生一个应用程式中常见的「关於」页面。 应用程式的「关於」页面中,通常要包含版本讯息、作者、联络方式、首页等资讯。

我们的「关於」页面将以弹出对话框的方式表现。所需要做的,是撰写负责处理对话框的「openOptionsDialog」函式,并将之附加在原本应用程式中「calcBMI」这个按钮元件的「OnClickListener」方法上。当我们按下「计算 BMI 值」按钮时,即弹出对话框。

等我们学会了对话框的写法,在接下来学习 Android 选单的章节中,我们会改将对话框函式放入选单中。

对话框中所能显示的内容千变万化。对 Android 来说,对话框也是一种显示内容(View)。与一般全页面显示的不同之处,在於对话框会重迭显示到原本的呼叫页面上,而且在对话框的主要显示内容下方,可能还会再附加上几个按钮,用以回到原页面,或是用来执行其他的动作。

要在 Android 程式中呼叫一个对话框,有二个主要步骤:

# 定义呼叫点 # 实作对话框

定义呼叫点实作对话框重构加入按钮http://code.google.com/android/reference/android/app/AlertDialog.Builder.html

修改「Bmi.java」

Bmi.java

1private OnClickListener calcBMI = new OnClickListener()

2{

3public void onClick(View v)

4{

.....

6}else{

7view_suggest.setText(R.string.advice_average);

8}

9openOptionsDialog();

我们在「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();

}

}

更详细的对话框使用可参考官方文件

顺道一提 -「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();

赞助本站

人工智能实验室

相关热词: Dialog 对话框

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港