执行一个EditText View 第七章(7)

   你需要增加一个View到活动中来使得用户输入一些文本。然后你会分析那个文本并把它发送到前一节的Intent呼叫中。因为所有的视图是从基本的视图中派生出来的,它们在结构和使用方面非常的相似。你会发现执行一个EditText是一个非常简单的操作。

    首先,在main.xml文件中放置 Views。实际上这里要放两个View:一个TextView来实现作为一个标签并且给出一些指示给用户,另外一个就是EditView来接收用户的输入。这个Views一起将增加深度和实用性到你的活动中。

    因为你组成活动的外观,记住.xml是在视觉上构成的。这个就意味着加入你要TextView在最后的活动中显示在EditText的上面,你应当在main.xml文件中把它放在EditText之前。

    因为你已经用过好几次TextViews了,所以这里不会讲的太多。简单的看一些你设置的TextView的属性:

 

<TextView android:id="@+id/textLabel" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="Enter Number to Dial:" 
/>

   没什么特别的地方。这只是个简单的TextView用文本输入号码来拨号:。这个TextView将会用做EditView的显示标签。这里是你为EditView设置的属性:

<EditText android:id="@+id/phoneNumber" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
/>

注意

你没有必要一定去设置androd:text属性,因为你不需要任何缺省的文本。

    这个id被用来设为phoneNumber,这是个名字,你将要用来在代码中参阅到EditText。再说一次,当设置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" 
142 Android: A Programmer’s Guide 
Chapter 7: Using Intents and the Phone Dialer 143 
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来继续工作。假如你不在使用一个现存的AndroidPhoneDialer.java文件——本章中的前一个项目——你可能需要参阅前一部分去看看增加到.java文件中是什么样的代码。这样会确保你从代码中的正确部分开始。

    在.java文件中你第一个增加的条目是包装定义。你不仅需要增加包装到Uri,按钮和Intent,同时还要到EditText:

import android.widget.Button; 
import android.content.Intent; 
import android.net.Uri; 
import android.widget.EditText;

    设置EditText View的语法和设置按钮的语法一致:

final EditText <edittext_name> = <edittext>

    再说一次,呼叫你的EditText phoneNumber。创建EditText的代码如下:

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

    一旦你的phoneNumber 这个EditTexT创建好了,你可以使用它来参阅在设备上输入的文本。现在你要做的就是呼叫phoneNumber.getText()来找回用户的输入。在下面的行里替换代码数值“tel:5551212”

Intent(Intent.CALL_ACTION,Uri.parse("tel:5551212")); 
with the value of getText( ): 
Intent(Intent.CALL_ACTION,Uri.parse("tel:" + phoneNumber.getText()));

    这就是本项目所有你需要更新的新代码。有了这两个新的附加内容,你可以给用户一个可以输入电话号码的对象,并且把号码发送到电话的呼叫活动中。完整的.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); 
} 
}); 
} 
}

    当你在模拟器中运行应用程序,你应当看到一个类似于下面插图的屏幕(略)。

试试这个:修改AndoridPhoneDialer项目