按鍵響應的第一種方式:
在XML文件里面設置按鍵的onClick綁定函數。就像下面的代碼,給Button設置onClick屬性,在按鍵被按下的時候,會調用java文件里面的onClickbtton1這個函數,因為現已將它和這個按鈕進行了綁定。利用布局文件中的onClick屬性,并在實現文件中實現該方法。注意的是這里的方法名應該和布局文件中onClick屬性的方法名相同,該方法必須是public方法。
< Buttonandroid: id= " @+id/btn1" android: layout_width= " wrap_content" android: layout_height= " wrap_content" android: onClick= " onClickbtton1" android: text= " 按鍵一" />
下面是兩個通過兩個按鍵來調用綁定的函數的XML代碼:
< 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" tools: context= " .MainActivity" > < Buttonandroid: id= " @+id/btn1" android: layout_width= " wrap_content" android: layout_height= " wrap_content" android: onClick= " onClickbtton1" android: text= " 按鍵一" /> < Buttonandroid: id= " @+id/btn2" android: layout_alignParentRight= " true" android: layout_width= " wrap_content" android: layout_height= " wrap_content" android: onClick= " onClickbtton1" android: text= " 按鍵二" />
</ RelativeLayout>
package com. fhn. buttonresponse ;
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 onClickbtton1 ( View v
) { int id
= v
. getId ( ) ; switch ( id
) { case R . id
. btn1
: System . out
. println ( "按鍵一被按下" ) ; System . out
. println ( id
) ; Toast . makeText ( this , "按鍵一" , 0 ) . show ( ) ; break ; case R . id
. btn2
: System . out
. println ( "按鍵二被按下" ) ; System . out
. println ( id
) ; Toast . makeText ( this , "按鍵二" , 0 ) . show ( ) ; break ; default : break ; } }
}
按鍵響應的第二種方式:
關于監聽器:監聽器是一個存在于View類下的接口,一般以On**Llistener命名,實現該接口需要復寫相應的on (View v)方法(如onClick(View v))。Android提供的基于事件監聽接口有OnClickListener、OnLongClickListener、OnFocusChangeListener、OnKeyListener、OnTouchListener、OnCreateContextMenuListener等。
OnClickListener接口:該接口處理的是點擊事件。在觸摸模式下,是在某個View上按下并抬起的組合動作,而在鍵盤模式下,是某個View獲得焦點后點擊確定鍵或者按下軌跡球事件。 OnLongClickListener接口: OnLongClickListener接口與上述的OnClickListener接口原理基本相同,只是該接口為View長按事件的捕捉接口,即當長時間按下某個View時觸發的事件。 OnFocusChangeListener接口:OnFocusChangeListener接口用來處理控件焦點發生改變的事件。如果注冊了該接口,當某個控件失去焦點或者獲得焦點時都會觸發該接口中的回調方法。 OnKeyListener接口:是對手機鍵盤進行監聽的接口,通過對某個View注冊并監聽,當View獲得焦點并有鍵盤事件時,便會觸發該接口中的回調方法。 OnTouchListener接口:是用來處理手機屏幕事件的監聽接口,當為View的范圍內觸摸按下、抬起或滑動等動作時都會觸發該事件。 OnCreateContextMenuListener接口:是用來處理上下文菜單顯示事件的監聽接口。該方法是定義和注冊上下文菜單的另一種方式。
實現監聽的兩種方法:
方法一:在Activity中定義一個內部類繼承監聽器接口(這里是OnClickListener)。常見的繼承方法如下:
class MyListener implements View. OnClickListener { @Override public void onClick ( View v
) { Toast . makeText ( MainActivity . this , "you have clicked Button2" , Toast . LENGTH_SHORT
) . show ( ) ; }
OnClickListener接口的使用(XML文件只需要為控件設置ID即可,不用綁定函數,需要在java文件中將XML文件中的按鍵和java代碼通過findViewById關聯起來):
package com. fhn. buttonresponse ;
import android. app. Activity ;
import android. os. Bundle ;
import android. view. View ;
import android. widget. Button ; 首先應該實現接口類,再類中實現onClick方法,實現業務代碼。
class Myclick implements View. OnClickListener
{ @Override public void onClick ( View v
) { int id
= v
. getId ( ) ; switch ( id
) { case R . id
. btn1
: System . out
. println ( "按鍵一被按下" ) ; System . out
. println ( id
) ; break ; case R . id
. btn2
: System . out
. println ( "按鍵二被按下" ) ; System . out
. println ( id
) ; break ; default : break ; } }
}
public class MainActivity extends Activity { Button btu1
; Button btu2
; @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; setContentView ( R . layout
. activity_main
) ; btu1
= ( Button ) findViewById ( R . id
. btn1
) ; btu2
= ( Button ) findViewById ( R . id
. btn2
) ; btu1
. setOnClickListener ( new Myclick ( ) ) ; btu2
. setOnClickListener ( new Myclick ( ) ) ; }
}
方法二:實現匿名內部類。這種方法適合只希望對監聽器進行一次性使用的情況,在該代碼塊運行完畢之后,該監聽器也就不復存在了。
bt1
. setOnClickListener ( new View. OnClickListener ( ) { @Override public void onClick ( View v
) { Toast . makeText ( MainActivity . this , "you have clicked Button1" , Toast . LENGTH_SHORT
) . show ( ) ; } } ) ;
使用匿名內部類的方式創建監聽器:
package com. fhn. buttonresponse ;
import android. app. Activity ;
import android. os. Bundle ;
import android. view. View ;
import android. widget. Button ; public class MainActivity extends Activity { Button btu1
; Button btu2
; @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; setContentView ( R . layout
. activity_main
) ; btu1
= ( Button ) findViewById ( R . id
. btn1
) ; btu2
= ( Button ) findViewById ( R . id
. btn2
) ; btu1
. setOnClickListener ( new View. OnClickListener ( ) { @Override public void onClick ( View v
) { System . out
. println ( "按鍵一被按下" ) ; System . out
. println ( v
. getId ( ) ) ; Toast . makeText ( MainActivity . this , "按鍵一" , 0 ) . show ( ) ; } } ) ; btu2
. setOnClickListener ( new View. OnClickListener ( ) { @Override public void onClick ( View v
) { System . out
. println ( "按鍵二被按下" ) ; System . out
. println ( v
. getId ( ) ) ; Toast . makeText ( MainActivity . this , "按鍵二" , 0 ) . show ( ) ; } } ) ; }
}
按鍵響應第三種方式(為整個Activity設置監聽器):
package com. fhn. buttonresponse ;
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 btu1
; Button btu2
; @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; setContentView ( R . layout
. activity_main
) ; btu1
= ( Button ) findViewById ( R . id
. btn1
) ; btu2
= ( Button ) findViewById ( R . id
. btn2
) ; btu1
. setOnClickListener ( this ) ; btu2
. setOnClickListener ( this ) ; } @Override public void onClick ( View v
) { int id
= v
. getId ( ) ; switch ( id
) { case R . id
. btn1
: System . out
. println ( "按鍵一被按下" ) ; System . out
. println ( id
) ; Toast . makeText ( this , "按鍵一" , 0 ) . show ( ) ; break ; case R . id
. btn2
: System . out
. println ( "按鍵二被按下" ) ; System . out
. println ( id
) ; Toast . makeText ( this , "按鍵二" , 0 ) . show ( ) ; break ; default : break ; } }
}
安卓頁面的跳轉:
為安卓添加一個新的界面,新建完成后可以看到Manifest.xml下面會新注冊一個界面。
頁面跳轉(可以通過綁定函數加Intent實現):
就是在綁定函數里面添加Intent,新建Intent對象然后設置上下文(當前界面)和將要跳轉界面的類。然后使用startActivity方法實現跳轉。
package com. fhn. jump ;
import android. app. Activity ;
import android. content. Intent ;
import android. os. Bundle ;
import android. view. View ;
import android. widget. Button ;
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 goSecond ( View v
) { Intent intent
= new Intent ( this , SecondMainActivity . class ) ; startActivity ( intent
) ; }
}
package com. fhn. jump ; import android. app. Activity ;
import android. content. Intent ;
import android. os. Bundle ;
import android. view. Menu ;
import android. view. View ;
public class SecondMainActivity extends Activity { @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; setContentView ( R . layout
. activity_second_main
) ; } public void gothird ( View v
) { Intent intent
= new Intent ( this , ThirdMainActivity . class ) ; startActivity ( intent
) ; }
}
package com. fhn. jump ; import android. app. Activity ;
import android. content. Intent ;
import android. os. Bundle ;
import android. view. Menu ;
import android. view. View ; public class ThirdMainActivity extends Activity { @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; setContentView ( R . layout
. activity_third_main
) ; } public void gofirst ( View v
) { Intent intent
= new Intent ( this , MainActivity . class ) ; startActivity ( intent
) ; }
}
以整個Activity監聽的方式實現界面跳轉(以下代碼能夠實現由界面1到2,2到3,3到1):
package com. fhn. jump ; import android. app. Activity ;
import android. content. Intent ;
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 btu1
; @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; setContentView ( R . layout
. activity_main
) ; btu1
= ( Button ) findViewById ( R . id
. btn1
) ; btu1
. setOnClickListener ( this ) ; } @Override public void onClick ( View arg0
) { Intent intent
= new Intent ( this , SecondMainActivity . class ) ; startActivity ( intent
) ; }
}
package com. fhn. jump ; import android. app. Activity ;
import android. content. Intent ;
import android. os. Bundle ;
import android. view. Menu ;
import android. view. View ;
import android. widget. Button ;
public class SecondMainActivity extends Activity implements View. OnClickListener { Button btu1
; @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; setContentView ( R . layout
. activity_second_main
) ; btu1
= ( Button ) findViewById ( R . id
. btn2
) ; btu1
. setOnClickListener ( this ) ; } public void onClick ( View arg0
) { Intent intent
= new Intent ( this , ThirdMainActivity . class ) ; startActivity ( intent
) ; }
}
package com. fhn. jump ; import android. app. Activity ;
import android. content. Intent ;
import android. os. Bundle ;
import android. view. View ;
import android. widget. Button ; public class ThirdMainActivity extends Activity implements View. OnClickListener { Button btu
; @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; setContentView ( R . layout
. activity_third_main
) ; btu
= ( Button ) findViewById ( R . id
. btn3
) ; btu
. setOnClickListener ( this ) ; } public void onClick ( View arg0
) { Intent intent
= new Intent ( this , MainActivity . class ) ; startActivity ( intent
) ; }
}
頁面跳轉如何傳參(整型或者字符串——putExtra):
第一個界面向第二個界面傳參(整數1),第二個界面向第三個界面傳參(字符串sting),第三個界面向第一個界面傳參(字符串string2)
package com. fhn. jump ; import android. app. Activity ;
import android. content. Intent ;
import android. os. Bundle ;
import android. view. View ;
import android. widget. Button ;
import android. widget. Toast ; public class MainActivity extends Activity { Button btu1
; private String data2
; @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; setContentView ( R . layout
. activity_main
) ; Intent i
= this . getIntent ( ) ; data2
= i
. getStringExtra ( "Mydata" ) ; Toast . makeText ( this , data2
, Toast . LENGTH_LONG
) . show ( ) ; } public void goSecond ( View v
) { Intent intent
= new Intent ( this , SecondMainActivity . class ) ; intent
. putExtra ( "Mydata" , 1 ) ; startActivity ( intent
) ; }
}
package com. fhn. jump ;
import android. app. Activity ;
import android. content. Intent ;
import android. os. Bundle ;
import android. view. Menu ;
import android. view. View ;
import android. widget. Toast ; public class SecondMainActivity extends Activity { private int data1
; private String data2
; @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; setContentView ( R . layout
. activity_second_main
) ; Intent i
= this . getIntent ( ) ;
data1
= i
. getIntExtra ( "Mydata" , 0 ) ; System . out
. println ( data1
) ; Toast . makeText ( this , String . valueOf ( data1
) , Toast . LENGTH_LONG
) . show ( ) ; } public void gothird ( View v
) { Intent intent
= new Intent ( this , ThirdMainActivity . class ) ; intent
. putExtra ( "Mydata" , "string" ) ; startActivity ( intent
) ; }
}
package com. fhn. jump ; import android. app. Activity ;
import android. content. Intent ;
import android. os. Bundle ;
import android. view. Menu ;
import android. view. View ;
import android. widget. Toast ;
public class ThirdMainActivity extends Activity { private String data2
; @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; setContentView ( R . layout
. activity_third_main
) ; Intent i
= this . getIntent ( ) ; data2
= i
. getStringExtra ( "Mydata" ) ; Toast . makeText ( this , data2
, Toast . LENGTH_LONG
) . show ( ) ; } @Override public boolean onCreateOptionsMenu ( Menu menu
) { getMenuInflater ( ) . inflate ( R . menu
. third_main
, menu
) ; return true ; } public void gofirst ( View v
) { Intent intent
= new Intent ( this , MainActivity . class ) ; intent
. putExtra ( "Mydata" , "string2" ) ; startActivity ( intent
) ; }
}
使用Bundle的方式實現界面的數據傳輸:
package com. fhn. jump ; import android. app. Activity ;
import android. content. Intent ;
import android. os. Bundle ;
import android. view. View ;
import android. widget. Button ; public class MainActivity extends Activity { Button btu1
; @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; setContentView ( R . layout
. activity_main
) ; } public void goSecond ( View v
) { Intent intent
= new Intent ( this , SecondMainActivity . class ) ; Bundle bundle1
= new Bundle ( ) ; bundle1
. putChar ( "char" , 'a' ) ; bundle1
. putString ( "string" , "string" ) ; intent
. putExtras ( bundle1
) ; startActivity ( intent
) ; }
}
package com. fhn. jump ; import android. app. Activity ;
import android. content. Intent ;
import android. os. Bundle ;
import android. view. View ;
import android. widget. Toast ; public class SecondMainActivity extends Activity { char a
; String d
; @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; setContentView ( R . layout
. activity_second_main
) ; Intent i
= this . getIntent ( ) ; Bundle b
= i
. getExtras ( ) ; a
= b
. getChar ( "char" ) ; d
= b
. getString ( "string" ) ; Toast . makeText ( this , Character . toString ( a
) , 0 ) . show ( ) ; Toast . makeText ( this , d
, 0 ) . show ( ) ; } public void gothird ( View v
) { Intent intent
= new Intent ( this , ThirdMainActivity . class ) ; startActivity ( intent
) ; }
}
安卓界面實現自動跳轉:
當使用Thread.sleep();這個線程延時函數的時候,會出現第一個界面無法顯示的問題,因為在一個APP啟動的時候會有一個主要的UI線程,而這個sleep實在當前的UI線程去做了阻塞的,UI顯示會不斷的刷新屏幕界面,而這時候sleep就是在刷新屏幕界面的時候阻塞,所以會造成界面出不來(無法看到界面的任何字符)。既然要實現界面的自動跳轉就一定要用到sleep但是不能在當前線程,要在一個新的線程里面去sleep,啟動另外一個線程,在新的線程里面sleep后顯示一個新的界面。
使用java開辟線程:
Thread t
= new Thread ( ) ;
t
. start ( ) ; 但是這樣并不知道你要在新的線程里面干什么,所以要要實例化的時候,添加參數:
Thread t
= new Thread ( new Runnable ( ) { @Override public void run ( ) { } } ) ;
Runnable 是一個接口,你需要重寫里面的run方法(run方法里面就是寫的你真正要干的工作)
package com. fhn. jump ;
import android. app. Activity ;
import android. content. Intent ;
import android. os. Bundle ;
import android. view. View ;
import android. widget. Button ;
import android. widget. Toast ; public class MainActivity extends Activity { @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; setContentView ( R . layout
. activity_main
) ; Thread t
= new Thread ( new Runnable ( ) { @Override public void run ( ) { try { Thread . sleep ( 3000 ) ; } catch ( InterruptedException e
) { e
. printStackTrace ( ) ; } Intent intent
= new Intent ( MainActivity . this , SecondMainActivity . class ) ; startActivity ( intent
) ; } } ) ; t
. start ( ) ; } public void goSecond ( View v
) { Intent intent
= new Intent ( this , SecondMainActivity . class ) ; startActivity ( intent
) ; }
}
Activity的生命周期:
相信不少朋友也已經看過這個流程圖了,也基本了解了Activity生命周期的幾個過程,我們就來說一說這幾個過程。
啟動Activity:系統會先調用onCreate方法,然后調用onStart方法,最后調用onResume,Activity進入運行狀態。 當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。 當前Activity由被覆蓋狀態回到前臺或解鎖屏:系統會調用onResume方法,再次進入運行狀態。 當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居后臺:系統會先調用onPause方法,然后調用onStop方法,進入停滯狀態。 用戶后退回到此Activity:系統會先調用onRestart方法,然后調用onStart方法,最后調用onResume方法,再次進入運行狀態。 當前Activity處于被覆蓋狀態或者后臺不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而后用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。 用戶退出當前Activity,系統先調用onPause方法,然后調用onStop方法,最后調用onDestory方法,結束當前Activity。
總結
以上是生活随笔 為你收集整理的Android按键响应的几种方式、安卓页面的跳转、页面跳转传参、页面自动跳转、Activity(页面)的生命周期 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。