首先看看需要达到的效果:
对应的main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title" />
<EditText
android:id="@+id/number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:layout_below="@id/title"
/>
<Button
android:id="@+id/btn_call"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/number"
android:text="@string/callNumber" />
</RelativeLayout>
对于上面这段代码:需要了解相对布局,android:text=需要在哪里配置【alter+1】,为什么需要android:id,一个布局组件相对于另外一个布局组件是总么相对的。android:id="@+id/btn_call中后面的@+i是代表创建一个id的,而android:layout_below="@id/title"这个@id是代表使用一个id。
第一种单击事件:
在main.xml中要这样配置:android:onClick="call",
然后Activity中需要这样实现代码:
public void call(View v){
System.out.println("请拨打电话");
//取出输入框中的号码
EditText etNumber=(EditText) findViewById(R.id.number);
String number=etNumber.getText().toString();
//根据号码拨打电话
Intent intent=new Intent(); //创建一个意图
intent.setAction(Intent.ACTION_CALL); //指定要播出的号码
intent.setData(Uri.parse("tel:"+number));
startActivity(intent); //执行这个动作
}
方法里面的代码为拨号器的核心代码。
第二种方法:
这个时候我们将call方法变成私有,private来修饰
/*
* 拨打电话的私有方法
*/
private void call(){
System.out.println("请拨打电话");
//取出输入框中的号码
EditText etNumber=(EditText) findViewById(R.id.number);
String number=etNumber.getText().toString();
//根据号码拨打电话
Intent intent=new Intent(); //创建一个意图
intent.setAction(Intent.ACTION_CALL); //指定要播出的号码
intent.setData(Uri.parse("tel:"+number));
startActivity(intent); //执行这个动作
}
在onCreate方法中内部类来调用:让按钮Button来实现触发调用call方法
/*
* 当界面刚创建时回调此方法
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); //必须执行此句代码,执行父类的初始化方法
setContentView(R.layout.main); //执行当前几面
Button btnCall=(Button) findViewById(R.id.btn_call);
btnCall.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("MainActivity2拨打电话");
call();
}
});
第三种方法:
/*
* 当界面刚创建时回调此方法
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); //必须执行此句代码,执行父类的初始化方法
setContentView(R.layout.main); //执行当前几面
Button btnCall=(Button) findViewById(R.id.btn_call);
btnCall.setOnClickListener(new MyOnClickListener());
}
class MyOnClickListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("第三种方式实现");
call();
}
}
自己写一个类来实现这个类,这样就可以避免使用内部类。
第四种方法:让Activity实现这个接口OnClickListener
public class MainActivity4 extends Activity implements OnClickListener
在onCreate方法中让Button触发单击事件:
Button btnCall=(Button) findViewById(R.id.btn_call);
btnCall.setOnClickListener(this);
实现了OnClickListener借口肯定要实现接口中的方法:
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("第四种单击事件!");
call();
}