这次,我们来实现一个简单的应用程序——电话拨号器
1创建项目【MyPhone】,在项目src下新建一个包,取名MyPhoneActivity
我们要编写代码的文件共有三个,分别是:
1、res/layout 路径下的main.xml文件;
2、res/values 路径下的strings.xml文件;
3、MyPhoneActivity文件。
首先,编写strings.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Phone</string>
<string name="input_info">请输入您要拨打的号码:</string>
<string name="dial_caption">拨打</string>
</resources>
此时可以自行查看R.java 文件,在其string 静态内部类中已多出两条常量。
接下来,编写main.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/input_info" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/phone_number"/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/dial_btn"
android:text="@string/dial_caption"
/>
</LinearLayout>
id 属性指定该视图组件的唯一标识符,供程序或其他视图组件引用。
"@+id/button"的含义是在R.java文件中的id这个静态内部类添加一条常量名为button。如
果id这个静态内部类不存在,则会先生成它。
写完这两个文件后,实现效果如下:
最后,编写MyPhoneActivity文件。
package cn.class3g.activity;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class PhoneActivity extends Activity {
EditText numberEt;
Button dialBtn;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViews();
dialBtn.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
//调用系统的拨号服务实现拨打功能
String phone_number = numberEt.getText().toString();
phone_number = phone_number.trim();
if(phone_number != null && !phone_number.equals("")){
//封装一个拨打电话的intent,并且将电话号码包装成一个Uri对象传入
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + phone_number));
PhoneActivity.this.startActivity(intent);
}
}
});
}
public void findViews(){
numberEt = (EditText) this.findViewById(R.id.phone_number);
dialBtn = (Button) this.findViewById(R.id.dial_btn);
}
}
说明:
View android.app.Activity.findViewById(int id)
该方法继承自其父类Activity,作用是根据指定的id寻找对应的View。在该程序中,
R.id.button是R.java中id静态内部类中的button常量,其对应main.xml文件中定义的
Button元素。Button是View的子类,因此该方法也可以返回Button,只是需要进行强制
类型转换。
void android.view.View.setOnClickListener(OnClickListener l)
为Button注册一个回调方法,即当该Button被点击时会调用其参数l,参数l 中的
onClick()方法在点击Button后会被调用。l 的类型是View类的内部接口,创建该类型
的实例,可以创建一个实现了该接口的类,再实例化。当然简便的做法是采用匿名内部
类的方法来实现,并且在Android中建议我们使用匿名内部类,这样有助于提高应用的
性能。因此参数为
new View.OnClickListener() {
@Override
public void onClick(View v) {
}
},
AndroidManifest.xml文件
在AndroidManifest.xml文件中,需要加入的是一个CALL_PHONE的user指令
完成后,在此运行另外一个模拟器,两个模拟器的编号不同,这就相当于两个不同的电话号码,之间就可以拨号了