`
wc0903
  • 浏览: 81922 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

第七章 使用Intents与Phone Dialer——下

阅读更多

实现EditText视图

你需要为你的Activity添加爱一个视图,可以使用户输入一些文本。然后你解析这些文本并将它发送给前一节的Intent call。因为所有视图都是从基本视图集成而来。在架构和用法方面他们会非常相似。你会发现实现EditText非常简单。

首先,在main.xml中布局视图。实际上,你会在这里添加两个视图:一个TextView作为标签并给用户提示,和一个EditText来接受用户的输入。这两个视图会为你的Activity增加所需的深度和实用性。

如同你看到的Activity,记住.xml文件也是可视化的。这就意味着如果你想在最终的Activity上让TextView出现在EditText之上,你应在main.xml中将它放在EditText之前。

因为你已经使用了好几次TextView,这里就不在赘述视图的创建了。仅仅看一下TextView中你设置的属性。

<TextView android:id="@+id/textLabel"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Enter Number to Dial:"/>

这再平常不过了。这仅仅是一个简单的TextView,文本为Enter Number to Dial:。这个TextView会作为EditView的一个标签使用。下面是EditViw属性设置的内容:

<EditText android:id="@+id/phoneNumber"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

Id设置为phoneNumber,它是哦你在代码中用来和EditionText关联的名字。再次,设main.xml也很稀松平常。你最终的代码看起来像:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

<TextView android:id="@+id/textLabel"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Enter Number to Dial:"

/>

<EditText android:id="@+id/phoneNumber"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

<Button android:id="@+id/callButton"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:text="Show Dialer" />

</LinearLayout>

现在完成了main.xml。你可以转移到AndroidPhoneDialer.java上了——本章中的上项目——你可能会参考上一届看看.java文件中添加了什么代码。这能保证你从代码中的正确的点开始。

你需要添加到.java文件中的第一项是包定义。你不仅需要为UriButtonIntent添加包,也需要为EditText添加:

import android.widget.Button;

import android.content.Intent;

import android.net.Uri;

import android.widget.EditText;

创建EditView视图的语法和创建Button的相同:

final EditText <edittext_name> = <edittext>

再次,调用你的EditText phoneNuumber。创建EditText的代码如下:

final EditText phoneNumber = (EditText) findViewById(R.id.phoneNumber);

一旦你的phoneNumber EditText被创建了,你就可以使用它关联设备上输入的文本。现在你需要做的是调用phoneNumber.getText()来获取用户的输入。替换掉下一个行中的硬编码的值“tel:5551212,

Intent(Intent.CALL_ACTION,Uri.parse("tel:5551212"));

替换为getText()的值:

Intent(Intent.CALL_ACTION,Uri.parse("tel:" + phoneNumber.getText()));

这就是你需要更新的全部代码。增加这两小处后,你可以给你的用户一个输入电话号码的对象,并将号码发给电话的Call Activity..java文件的全部代码如下:

package android_programmers_guide.AndroidPhoneDialer;

import android.app.Activity;

import android.os.Bundle;

import android.widget.Button;

import android.view.View;

import android.content.Intent;

import android.net.Uri;

import android.widget.EditText;

public class AndroidPhoneDialer extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.main );

final EditText phoneNumber = (EditText) findViewById(R.id.phoneNumber

);

final Button callButton = (Button) findViewById(R.id.callButton);

callButton.setOnClickListener(new Button.OnClickListener() {

public void onClick(View v){

Intent CallIntent = new

Intent(Intent.CALL_ACTION,Uri.parse("tel:" + phoneNumber.getText()));

CallIntent.setLaunchFlags(Intent.NEW_TASK_LAUNCH );

startActivity(CallIntent);

}

});

}

}

当你在模拟器中运行应用时,你会看到和如下插图类似的屏幕:

尝试更改AndroidPhoneDialer

如果你玩透了AndroidPhoneDialer的最新版本,你会注意到缺少什么东西。不幸的是,现在项目的编写方式,可以允许你输入任何类型的值,并把它们发送给CallActivity。这实在不是一个最佳的应用开发方案。

做些研究并为EditText增加一些验证。使用下面的参数更改你的项目:

使用正则表达式验证EditText中输入的电话号码,在java.regex包中。

使用showAlert()语法,显示信息告诉用户输入了不合正则表达式的内容。

当你觉得干的好不错时,和下面的代码做个比较。

main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

<TextView android:id="@+id/textLabel"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Enter Number to Dial:"

/>

<EditText android:id="@+id/phoneNumber"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

<Button android:id="@+id/callButton"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:text="Show Dialer" />

</LinearLayout>

 

AndroidPhoneDialer.java

package android_programmers_guide.AndroidPhoneDialer;

import android.app.Activity;

import android.os.Bundle;

import android.widget.Button;

import android.view.View;

import android.content.Intent;

import android.net.Uri;

import android.widget.EditText;

import java.util.regex.*;

public class AndroidPhoneDialer extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.main );

final EditText phoneNumber = (EditText)

findViewById(R.id.phoneNumber );

final Button callButton = (Button) findViewById(R.id.callButton);

callButton.setOnClickListener(new Button.OnClickListener() {

 

public void onClick(View v){

if (validatePhoneNumber(phoneNumber.getText().toString())){

Intent CallIntent = new

Intent(Intent.CALL_ACTION,Uri.parse("tel:" + phoneNumber.getText()));

CallIntent.setLaunchFlags(Intent.NEW_TASK_LAUNCH );

startActivity(CallIntent);

}

else{

showAlert("Please enter a phone number in the X-XXX-XXX-XXXX

format.",0, "Format Error", "Re-enter Number",false);

}

}

});

}

public boolean validatePhoneNumber(String number){

Pattern phoneNumber = Pattern.compile("(\\d-)?(\\d{3}-)?\\d{3}

\\d{4}");

Matcher matcher = phoneNumber.matcher(number);

return matcher.matches();

}

}

当你运行该项目,你会输出一条如下的类似信息。

下一章,你会学习更多的试图,你会创建一些多Activity的应用,使你能够探索并创建本书中还没提过的视图。你也会创建并利用一个菜单系统来启动你的Activity

 

专家答疑

问:有没有一种从模拟器中接打电话的方式,来验证这些Activity是否可用。?

答:截止到本书编写之时,还么有一种方式能够从模拟器完成电话的接打。然而Google的未来发布的SDK中有相关的话题,开发者可以启动两个模拟器,在两者之间来完成通话。

问:有没有其它类型的供Activity可用的按钮——拥有不同的外观或感觉?

答:有。你可以使用样式属性,来创建小按钮或拥有向上,向下,向左,向右指针的小按钮。

 

  • 大小: 22.3 KB
  • 大小: 24.4 KB
4
0
分享到:
评论
3 楼 xydz 2010-09-03  
估计是版本不一样
2 楼 xydz 2010-09-03  
Intent CallIntent = new

Intent(Intent.CALL_ACTION,Uri.parse("tel:" + phoneNumber.getText()));
这里很明显错了!
1 楼 joe_zhpf 2010-03-17  
感谢 楼主啊.太好了.谢谢.

相关推荐

    东软集团内部培训-Android编程指南

    第 1 章什么是 Android 第二章 下载和安装 ...第七章 使用 Intents 和电话拨号盘 第八章 列表,菜单和其它 Views 第九章 使用手机的 GPS 功能 . 第十章 使用 Google AP I 的 Gtak 第十一章 应用程序:找一个朋友

    android_8.1 Dialer源码

    9. **Intents**:Dialer与其他系统服务通过Intent进行通信,如`ACTION_NEW_OUTGOING_CALL`表示新的拨出通话请求。 10. **电话状态监听**:Dialer会注册`PhoneStateListener`监听通话状态,如电话的拨打、接听、挂断...

    Android A Programmer’s Guide.rar

    7 Using Intents and the Phone Dialer . . . 117 8 Lists, Menus, and Other Views . 149 9 Using the Cell Phone’s GPS Functionality . . 203 10 Using the Google API with GTalk . . . . 239 11 ...

    Professional Android 2 Application Development [1e, 2010].pdf

    在第七章中,作者讲解了如何在Android应用中使用SQLite数据库,包括数据库的创建、查询、更新和删除操作。同时,还介绍了Content Provider的概念,它是Android四大组件之一,用于提供数据访问接口。 ### 第8章:...

    中文版Android程序员向导

    第七章“使用Intents 和电话拨号盘”深入到Android的核心机制之一——Intent,解释了Intent如何连接应用的不同组件,并展示了如何与系统服务(如拨号盘)进行交互。 第八章“列表,菜单和其它Views”介绍了Android ...

    Android编程指南+程序员入门(中文版).pdf

    第七章:使用Intents和电话拨号盘 - **Intent机制**:探讨如何利用Intent在不同组件间传递数据和请求服务,实现应用间的交互与通信。 - **电话拨号盘集成**:展示如何在应用中集成电话拨号功能,使用户能直接从...

    Pro Android 3

    ### 第7章:工作与菜单 - **选项菜单**:讲解了如何添加和处理选项菜单项。 - **上下文菜单**:演示了如何创建并显示上下文菜单。 - **自定义菜单**:指导如何根据需求自定义菜单样式和功能。 ### 第8章:工作与...

    《android2 高级编程》 英文版 pdf

    8. **第7章:数据库与内容提供者**(Databases and Content Providers):重点介绍SQLite数据库的使用方法,以及如何通过Content Provider实现数据共享。 9. **第8章:地图、地理编码与基于位置的服务**(Maps, ...

    Android4高级编程(第3版)英文原版.pdf

    第七章:Files, Saving State, and Preferences 应用往往需要处理文件、保存应用状态以及用户偏好设置,本章将介绍如何使用文件输入输出、状态保存机制以及如何处理应用的配置信息。 第八章:Databases and Content...

    Professional Android 4 Application Development

    7. **第7章:Files, Saving State, and Preferences** - 文件存储的方式和优缺点比较。 - SharedPreferences的使用方法。 - 应用程序状态保存的最佳实践。 8. **第8章:Databases and Content Providers** - ...

    Android 异步联系人备份与恢复Demo

    - 转换为VCard:将获取到的Cursor中的每一项联系人数据转化为VCard字符串,可以使用ContactsContract类的导出函数`ContactsContract.Intents.exportVCard()`或自定义实现。 - 写入文件:将VCard字符串写入到外部...

    api demo,包含android所有api的演示代码,这是4.2

    4. **Intent与广播接收器(Intents & Broadcast Receivers)**:演示了如何启动活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver),以及如何使用隐式和显式Intent传递信息。 5. **服务(Services)**:...

    深入理解Android Telephony原理剖析与最佳实践(带完整书签版).杨青平

    7. Intents与BroadcastReceiver:在Android中,电话事件通常通过Intent和BroadcastReceiver来传递。书中会讲解如何注册和使用BroadcastReceiver来监听电话相关的广播事件。 8. Permissions与安全:讨论与电话服务...

    安卓Android源码——快捷图标的创建与移除.zip

    1. **Intent Intents**: 创建快捷图标的第一步是定义一个`Intent`,这个`Intent`用于启动快捷方式。通常,我们需要创建一个`Intent`来指定要启动的Activity和一些额外的数据。 ```java Intent shortcutIntent = new...

    Beginning iOS 4 application development

    **第7章:屏幕旋转** - 讨论了如何使应用程序能够适应设备的横竖屏旋转。 - 提供了屏幕旋转时的界面布局和内容调整策略。 ### 三、数据展示与持久化 **第8章:使用表格视图** - 详细讲解了如何使用UITableView来...

Global site tag (gtag.js) - Google Analytics