- 浏览: 81922 次
- 性别:
- 来自: 郑州
最新评论
-
老梦a:
...怎么用的呢,我把js和css都引入了,但是用的时候没起作 ...
在Ext的grid里实现带radio单选功能的gridList -
Mydwr:
我也正在找要实现这样的效果
在Ext的grid里实现带radio单选功能的gridList -
kkgoing:
运行不报错,但是还是有问题,index页面打不开,测试的时候插 ...
昨天整理的基于Annotation的MVC框架SSH示例 -
kjsoloho:
感谢你的肺腑之言
价值是如何放大的 -
kjsoloho:
希望继续,期待
《Android程序员指南》翻译暂停,望见谅
实现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文件中的第一项是包定义。你不仅需要为Uri,Button和Intent添加包,也需要为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可用的按钮——拥有不同的外观或感觉?
答:有。你可以使用样式属性,来创建小按钮或拥有向上,向下,向左,向右指针的小按钮。
评论
Intent(Intent.CALL_ACTION,Uri.parse("tel:" + phoneNumber.getText()));
这里很明显错了!
发表评论
-
第八章 列表、菜单以及其它视图——续
2010-03-19 09:00 1453AndroidViews.java 创建这个Activity ... -
第八章 列表、菜单以及其它视图——继
2010-03-19 08:55 1795本节展示radiogroup.xml的全部代码。根据章节前面的 ... -
第八章 列表、菜单以及其它视图——后
2010-03-19 08:50 1429AndroidViews.java 创建这个Activity ... -
第八章 列表、菜单以及其它视图——下
2010-03-19 08:42 1779这里是你的完整的AndroidManifest.xml项目文件 ... -
第八章 列表、菜单以及其它视图——中
2010-03-19 08:39 1659这段代码有个问题:onOptionsItemSelected( ... -
第八章 列表、菜单以及其它视图——上
2010-03-19 08:31 2594关键技能和概念 l 构建Activity l ... -
第七章 使用Intents与Phone Dialer——中
2010-03-02 09:16 2671为给你的Activity分配正确的权限,你首先需要知道你需要分 ... -
第七章 使用Intents与Phone Dialer——上
2010-03-02 09:07 3821第一章 使用Intents与Phone Dialer ... -
第六章 使用命令行工具与Android模拟器——下
2010-02-25 16:49 6155由于你在Android服务端安放了应用,你就可以删除它。使用命 ... -
第六章 使用命令行工具与Android模拟器——中
2010-02-25 16:38 5407<arg value="install&quo ... -
第六章 使用命令行工具与Android模拟器——上
2010-02-25 16:25 4575关键技能和概念 l 使用Android SDK ... -
第五章 应用:Hello World!——下
2010-02-24 09:07 2666还是Hello World! 本节中,你会创建另一个 ... -
第五章 应用:Hello World!——上
2010-02-24 09:00 2375关键技能和概念 l ... -
第四章 探索Android SDK
2010-02-21 22:27 6208关键技能和概念 l ... -
第三章 下载、安装Android SDK
2010-02-20 16:19 6708关键技能和概念 l ... -
第二章 下载、安装Eclipse
2010-02-20 11:28 5365关键技能和概念 l 选择一个开发环境 l ... -
第一章 Android是什么?
2010-02-20 11:17 2073关键技能和概念 l 嵌入式编程的历史 l ... -
致谢与序言
2010-02-05 16:12 1332致谢 感谢所有参与编写这本书的人,我的经纪 ... -
为什么要翻译《Android A Programmer's Guide》——《Android程序员指南》
2010-02-05 16:08 2893学习Android编程,却发现这些方面的好书很少,于是 ...
相关推荐
第 1 章什么是 Android 第二章 下载和安装 ...第七章 使用 Intents 和电话拨号盘 第八章 列表,菜单和其它 Views 第九章 使用手机的 GPS 功能 . 第十章 使用 Google AP I 的 Gtak 第十一章 应用程序:找一个朋友
9. **Intents**:Dialer与其他系统服务通过Intent进行通信,如`ACTION_NEW_OUTGOING_CALL`表示新的拨出通话请求。 10. **电话状态监听**:Dialer会注册`PhoneStateListener`监听通话状态,如电话的拨打、接听、挂断...
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 ...
在第七章中,作者讲解了如何在Android应用中使用SQLite数据库,包括数据库的创建、查询、更新和删除操作。同时,还介绍了Content Provider的概念,它是Android四大组件之一,用于提供数据访问接口。 ### 第8章:...
第七章“使用Intents 和电话拨号盘”深入到Android的核心机制之一——Intent,解释了Intent如何连接应用的不同组件,并展示了如何与系统服务(如拨号盘)进行交互。 第八章“列表,菜单和其它Views”介绍了Android ...
第七章:使用Intents和电话拨号盘 - **Intent机制**:探讨如何利用Intent在不同组件间传递数据和请求服务,实现应用间的交互与通信。 - **电话拨号盘集成**:展示如何在应用中集成电话拨号功能,使用户能直接从...
### 第7章:工作与菜单 - **选项菜单**:讲解了如何添加和处理选项菜单项。 - **上下文菜单**:演示了如何创建并显示上下文菜单。 - **自定义菜单**:指导如何根据需求自定义菜单样式和功能。 ### 第8章:工作与...
8. **第7章:数据库与内容提供者**(Databases and Content Providers):重点介绍SQLite数据库的使用方法,以及如何通过Content Provider实现数据共享。 9. **第8章:地图、地理编码与基于位置的服务**(Maps, ...
第七章:Files, Saving State, and Preferences 应用往往需要处理文件、保存应用状态以及用户偏好设置,本章将介绍如何使用文件输入输出、状态保存机制以及如何处理应用的配置信息。 第八章:Databases and Content...
7. **第7章:Files, Saving State, and Preferences** - 文件存储的方式和优缺点比较。 - SharedPreferences的使用方法。 - 应用程序状态保存的最佳实践。 8. **第8章:Databases and Content Providers** - ...
- 转换为VCard:将获取到的Cursor中的每一项联系人数据转化为VCard字符串,可以使用ContactsContract类的导出函数`ContactsContract.Intents.exportVCard()`或自定义实现。 - 写入文件:将VCard字符串写入到外部...
4. **Intent与广播接收器(Intents & Broadcast Receivers)**:演示了如何启动活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver),以及如何使用隐式和显式Intent传递信息。 5. **服务(Services)**:...
7. Intents与BroadcastReceiver:在Android中,电话事件通常通过Intent和BroadcastReceiver来传递。书中会讲解如何注册和使用BroadcastReceiver来监听电话相关的广播事件。 8. Permissions与安全:讨论与电话服务...
1. **Intent Intents**: 创建快捷图标的第一步是定义一个`Intent`,这个`Intent`用于启动快捷方式。通常,我们需要创建一个`Intent`来指定要启动的Activity和一些额外的数据。 ```java Intent shortcutIntent = new...
**第7章:屏幕旋转** - 讨论了如何使应用程序能够适应设备的横竖屏旋转。 - 提供了屏幕旋转时的界面布局和内容调整策略。 ### 三、数据展示与持久化 **第8章:使用表格视图** - 详细讲解了如何使用UITableView来...