当前位置:  编程技术>移动开发
本页文章导读:
    ▪第七章使用Intents与Phone Dialer——上        第七章使用Intents与Phone Dialer——下 实现EditText视图 你需要为你的Activity添加爱一个视图,可以使用户输入一些文本。然后你解析这些文本并将它发送给前一节的Intent call。因为所有视图都是.........
    ▪ 障蔽Gallery的Item拖动选择        屏蔽Gallery的Item拖动选择 遇到一个需求,类似Gallery那样的显示效果,但不希望对它的Item拖动选择。   Gallery的Item能实现拖动是因为Gallery实现了GestureDetector.OnGestureListener,也就是在onScroll里处.........
    ▪ 【转】G1俭省GPRS流量方法       【转】G1节省GPRS流量方法! G1刚入手没几天,从入手到现在每天都开着GPRS网络,今天去查了一下流量,5天居然消耗了近20M!...这样的流量,即使包月100M也难经得起用~于是查了一下GPRS详.........

[1]第七章使用Intents与Phone Dialer——上
    来源: 互联网  发布时间: 2014-02-18
第七章使用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文件中的第一项是包定义。你不仅需要为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可用的按钮——拥有不同的外观或感觉?

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

 

1 楼 joe_zhpf 2010-03-17  
感谢 楼主啊.太好了.谢谢.
2 楼 xydz 2010-09-03  
Intent CallIntent = new

Intent(Intent.CALL_ACTION,Uri.parse("tel:" + phoneNumber.getText()));
这里很明显错了!
3 楼 xydz 2010-09-03  
估计是版本不一样

    
[2] 障蔽Gallery的Item拖动选择
    来源: 互联网  发布时间: 2014-02-18
屏蔽Gallery的Item拖动选择

遇到一个需求,类似Gallery那样的显示效果,但不希望对它的Item拖动选择。

 

Gallery的Item能实现拖动是因为Gallery实现了GestureDetector.OnGestureListener,也就是在onScroll里处理的。

 

要是不让它处理onScroll方法就可以实现item不能拖动了。也就是设置GestureDetector.setIsLongpressEnabled(false)就可以了,但GestureDetector是私有变量没办法对它进行设置。

 

后来折腾了很久,突然想到能不能通过对Gallery监听touch事件来拦截呢。尝试结果是可以的。

 

gallery.setOnTouchListener(new OnTouchListener() {
			
	@Override
	public boolean onTouch(View v, MotionEvent event) {
		if(event.getAction() == MotionEvent.ACTION_MOVE){
			return true;
		}
		return false;
	}
});
 
1 楼 cady36 2011-07-28  
相当有用啊。谢谢了。呵呵
2 楼 aa8283242 2011-12-28  
在gallery中 覆盖onScroll 方法 返回false 也可以达到禁止滑动的目的

    
[3] 【转】G1俭省GPRS流量方法
    来源: 互联网  发布时间: 2014-02-18
【转】G1节省GPRS流量方法!
G1刚入手没几天,从入手到现在每天都开着GPRS网络,今天去查了一下流量,5天居然消耗了近20M!...这样的流量,即使包月100M也难经得起用~于是查了一下GPRS详单,发现很多条目上的时间段间隔比较均匀、流量几乎都只有维持几KB上下,仔细一想,估计是开着G1的数据同步功能和一直在线所消耗的~

解锁后的G1默认是开启3个数据同步功能的:Gmail、Calendar、Contacts,但是国内运营商的GPRS包月价格并不是很经济,流量也并不是很充裕,因此最好将实时同步功能关闭以节约不必要的浪费!


自动数据同步功能的关闭的方法是:在Menu->Settings->Data synchronization下

将Auto-sync、Gmail、Calendar、Contacts前面的勾去掉

另外,一旦我们设置正确的APN后,比如CMNET,G1的EDGE图标是一直亮着的,也就是说我们一直接入在GPRS网络,这样自然也会带来一笔不小的无意义的流量开支,因此最好也要将其关闭~

目前截至ota-RC30,我没有找到类似N机上“需要时打开GPRS”的功能。因此要解决一直在线的问题只有两个,要么删除APN,要么修改APN配置以达到无法接入正确的GPRS网络,一般选择后者可以在有用时更方便的启用。这样设置之后可以再看一下G1上是不是EDGE图标已经不在了。

其实个人觉得,很多时候完全可以使用G1的wifi连接来执行各种网络操作,这样不仅速度更快更稳定,同时也可以不浪费GPRS,当然,前提是周围必须要有wifi环境~!

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3