一.生命周期
Android系统相当于servlet容器,Activity相当于一个servlet,我们的Activity处在这个容器中,一切创建实例、初始化、销毁实例等过程都是容器来调用的,这也就是所谓的“Don't call me, I'll call you.”机制。
经典的生命周期流程图:
了解了Activity生命周期的几个过程:
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
Button
用到Button控件时,往往都是“一次性”使用,这时,为了方便起见,我们一般采用的是匿名内部类的方法;
方法一:
public class MainActivity extends Activity {
private Button but ;
//Activity创建时被调用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
this.setContentView(R.layout.one);
but = (Button) findViewById(R.id.button1); //获取Button
but.setText("点击我看看"); //设置按钮名称
//方法一
but.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "滚!!", Toast.LENGTH_LONG).show();
}
});
}
在方法一的案例中可以看到,按照方法一的方法来做,我并不能有效的进行后期维护,所以我们要再定义一个类来存放;
定义一个类(ButOnClickListener)
package com.example.test;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
public class ButOnClickListener implements OnClickListener{
//获取Context对象
private Context context ;
//重载ButOnClickListener
public ButOnClickListener (Context con){
this.context = con ;
}
@Override
public void onClick(View v) {
Toast.makeText(context, "你滚。。。", Toast.LENGTH_LONG).show();
}
}
住:当添加一个按钮是,点击这个按钮是有相应的响应,只不过没有内容。
Toast.makeText有三参数要设置
context:Context对象;
Text:指定要显示内容;
duration:指定是时间;
最终显示结果:
二:简单的拨号器
相关的控件
按钮控件:Button
显示文本控件:TeextView
输入框控件:EditText
最终布局如下图
相关的XML配置
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- 按钮控件 -->
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<!-- 文本控件 -->
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/test" />
<!-- 输入框控件 -->
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<!-- 按钮控件(拨号) -->
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bohao"
/>
</LinearLayout>
Strings.xml 配置
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Test</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="test">请输入手机号</string>
<string name="bohao">拨号</string>
</resources>
最终效果图:
实现拨号如下代码
/**
* 当点击拨号按钮时触发此方法
* @param view view
*/
public void call(View view) {
System.out.println("拨号了 --");
//取出输入框的值
EditText et = (EditText) findViewById(R.id.numberBohao); //输入框对象
String s = et.getText().toString(); //要拨打的电话号码
System.out.println("号码是:"+s);
//根据号码拨打电话
//第一:创建一个意图
Intent intent = new Intent();
//第二:指定动作打电话
intent.setAction(Intent.ACTION_CALL);
//第三:指定要拨号的号码
intent.setData(Uri.parse("tel:"+s));
//第四:拨号
startActivity(intent);
}
注意:要开启相应的权限
打开 -- AndroidManifest.xml
添加如下代码
1 <!-- 添加拨打电话的权限 --> 2 <uses-permission android:name="android.permission.CALL_PHONE"/>