安卓 按键响应与页面跳转
按键响应的几种方式
在xml中设置按键的onClick绑定的函数
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="buttonBeClicked"
android:text="按键1" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/button1"
android:layout_marginTop="77dp"
android:onClick="buttonBeClicked"
android:text="按键2" />
</RelativeLayout>
实现buttonBeClicked函数
package com.example.linmu.learn;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void buttonBeClicked(View v){
switch(v.getId()){ //获取button的ID
case R.id.button1: // 通过ID曲别
System.out.println("按键一被按下");
Toast.makeText(this, "按键一被按下", 0).show(); //在安卓app里显示 未来可用作调试
break;
case R.id.button2:
System.out.println("按键二被按下");
Toast.makeText(this, "按键二被按下", 0).show();
break;
}
}
}
自定义类实现按键监听事件的接口
监听器
Android提供的基于事件监听接口有OnClickListener、OnLongClickListener、OnFocusChangeListener、OnKeyListener、OnTouchListener、OnCreateContextMenuListener等。
1)OnClickListener接口:该接口处理的是点击事件。在触摸模式下,是在某个View上按下并抬起的组合动作,而在键盘模式下,是某个View获得焦点后点击确定键或者按下轨迹球事件。
2)OnLongClickListener接口: OnLongClickListener接口与上述的OnClickListener接口原理基本相同,只是该接口为View长按事件的捕捉接口,即当长时间按下某个View时触发的事件。
3)OnFocusChangeListener接口:OnFocusChangeListener接口用来处理控件焦点发生改变的事件。如果注册了该接口,当某个控件失去焦点或者获得焦点时都会触发该接口中的回调方法。
4)OnKeyListener接口:是对手机键盘进行监听的接口,通过对某个View注册并监听,当View获得焦点并有键盘事件时,便会触发该接口中的回调方法。
5)OnTouchListener接口:是用来处理手机屏幕事件的监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。
6)OnCreateContextMenuListener接口:是用来处理上下文菜单显示事件的监听接口。该方法是定义和注册上下文菜单的另一种方式。
通过OnClickListener实现
1 绑定 局部变量button和xml中的button。 findViewById
2 实现接口类,在类中实现onclicked方法。写业务代码
3 为1,2两步做的准备进行绑定。使得按键被按下后执行你写的业务代码。 setOnClickListener
package com.example.linmu.learn;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
class MyClieckHandler implements View.OnClickListener{ // 实现接口类
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.button1:
System.out.println("按键一被按下");
// Toast.makeText(this, "按键一被按下", 0).show();
break;
case R.id.button2:
System.out.println("按键二被按下");
// Toast.makeText(this, "按键二被按下", 0).show();
break;
}
}
}
public class MainActivity extends Activity {
Button btn1;
Button btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button)findViewById(R.id.button1);
btn2 = (Button)findViewById(R.id.button2);//绑定 局部变量
btn1.setOnClickListener(new MyClieckHandler());
btn2.setOnClickListener(new MyClieckHandler());//使得按键被按下后执行你写的业务代码
}
}
匿名内部类实现按键响应
与自定义类相似 只是使用了匿名内部类
package com.example.linmu.learn;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
Button btn1;
Button btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button)findViewById(R.id.button1);
btn2 = (Button)findViewById(R.id.button2);
btn1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
System.out.println("按键一被按下");
Toast.makeText(MainActivity.this, "按键一被按下", 0).show();
}
});
btn2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
System.out.println("按键二被按下");
Toast.makeText(MainActivity.this, "按键二被按下", 0).show();
}
});
}
}
Activity实现了click接口
package com.example.linmu.learn;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity implements View.OnClickListener{
Button btn1;
Button btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button)findViewById(R.id.button1);
btn2 = (Button)findViewById(R.id.button2);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){ //获取button的ID
case R.id.button1: // 通过ID曲别
System.out.println("按键一被按下");
Toast.makeText(this, "按键一被按下", 0).show(); //在安卓app里显示 未来可用作调试
break;
case R.id.button2:
System.out.println("按键二被按下");
Toast.makeText(this, "按键二被按下", 0).show();
break;
}
}
}
页面跳转
如何跳转
Intent intent = new Intent(this, SecondActivity.class);// 设置要跳转的页面
startActivity(intent); //跳转
跳转如何传参
1 直接传参(只能传一个)
intent.putExtra("Mydata", "林瑞淼帅");
接收
Intent i = this.getIntent();
data = i.getStringExtra("Mydata");
2 通过Bundle(传多个)
Bundle bundle = new Bundle();
bundle.putString("Mydata", "林瑞淼帅");
bundle.putInt("id", 520);
intent.putExtras(bundle);
接收
Intent i = this.getIntent();
Bundle b = i.getExtras();
data = b.getString("Mydata");
id = b.getInt("id");
具体实现
MainActivity.java(Bundle传参)
package com.example.linmu.learn;
import android.R.string;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void gosecond(View v){
Intent intent = new Intent(this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putString("Mydata", "林瑞淼帅");
bundle.putInt("id", 520);
intent.putExtras(bundle);
startActivity(intent);
}
}
SecondActivity.java(直接传参)
package com.example.linmu.learn;
import java.security.PrivateKey;
import java.security.PublicKey;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;
public class SecondActivity extends Activity {
private int id;
private String data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent i = this.getIntent();
Bundle b = i.getExtras();
data = b.getString("Mydata");
id = b.getInt("id");
Toast.makeText(this, "来自第一个页面的数据:"+data+id, 0).show();
}
public void gothird(View v){
Intent intent = new Intent(this, ThirdActivity.class);
intent.putExtra("Mydata", data);
startActivity(intent);
}
}
ThirdActivity.java
package com.example.linmu.learn;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.Toast;
public class ThirdActivity extends Activity {
private String data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
Intent i = this.getIntent();
data = i.getStringExtra("Mydata");
Toast.makeText(this, "来自第二个页面的数据:"+data, 0).show();
}
}
自动跳转
安卓线程
实现页面的若干秒后的自动跳转效果
1 run方法(函数)是线程要做的”事情”,相当linuxC线程的回调函数
2 启动线程
package com.example.linmu.learn;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 新线程里面去sleep,另外启动一个线程,在3秒后启动一个新页面。不要再UI线程中sleep
Thread t = new Thread(new Runnable() { //run方法(函数)是线程要做的”事情”
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("Mydata", "林瑞淼帅");
startActivity(intent);
}
});// 实例化一个线程
t.start(); //启动线程
}
}
Activity生命周期
经典的生命周期流程图:
相信不少朋友也已经看过这个流程图了,也基本了解了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。