安卓 按键响应与页面跳转

按键响应的几种方式

在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。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值