編輯:關於Android編程
1、自定義一個Activity類 要繼承系統的Activity類。
public classDemo2Activity extends Activity {
public void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2); //指定布局
}
}
2、在清單文件AndroidManifest.xml中聲明一個activity元素
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
android:name=".DemoActivity"
android:label="@string/app_name" >
android:name=".Demo2Activity"//配置類名
android:label="我是第二個activity" > //指定標題
android:host="cn.itcast" android:path="/gaga"
android:mimeType="audio/mpeg"/>
3、指定布局文件:創建res/layout/main2.xml布局文件:
激活組件使用系統提供的Intent類。
顯示意圖 需要知道要激活組件的類名。
顯示意圖一般用在同一個應用程序中組件的相互激活。
//第一個頁面的activity類:
public class DemoActivity extendsActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
//點擊按鈕 跳到第二個頁面的方法:
public void click(View view){
// Intent 的作用就是激活組件.
// 顯示意圖 一般用在同一個應用程序中 組件的相互激活
顯示意圖的多種寫法:
①//Intentintent = new Intent(this,Demo2Activity.class);
Intent intent = new Intent();
②//intent.setClass(this,Demo2Activity.class);
③//intent.setClassName("cn.itcast.mutileactivity",
"cn.itcast.mutileactivity.Demo2Activity");
④//intent.setClassName(this,
"cn.itcast.mutileactivity.Demo2Activity");
⑤//intent.setComponent(newComponentName(this,
"cn.itcast.mutileactivity.Demo2Activity"));
//激活意圖:
startActivity(intent);
}
隱式意圖主要用在不同程序中的組件間的激活。如撥打電話的意圖.
隱式意圖:操作系統要根據action data mimetype category 進行一個查詢, 所以隱式意圖的效率要比現實意圖的效率低一點 。
每個activity系統都會默認指定category 為android.intent.category.DEFAULT
1、 在AndroidManifest.xml清單文件中:指定一個意圖過濾器:
android:name=".Demo2Activity" //配置類名
android:label="我是第二個activity" > //指定標題
//當前意圖對應的動作,name的可隨意給
//為意圖配置數據,當意圖的action相同時,根據data數據區分具體的業務。
android:host="cn.itcast" //主機名
android:path="/gaga" //路徑
android:mimeType="audio/mpeg"/> //數據類型
//category元素,配置系統給定的意圖。
注意:①、一個activity可以配置多個意圖過濾器:
②、在定義的意圖過濾器中,要根據業務需求指定category元素的屬性對應意圖和當前意圖對應的動作,
2、 隱式意圖:頁面跳轉的點擊事件:
//隱式的意圖
public void click2(View view){
//用於不同應用程序之間組件的激活
// 操作系統要根據action data mimetype category 進行一個查詢
// 隱式意圖的效率要比現實意圖的效率低一點
Intentintent = new Intent();
//設置動作:將在清單文件指定好的動作設置進來
intent.setAction("cn.itcast.mutileactivity.haha");
//
使用設置數據和類型的方法,itcast://cn.itcast/gaga 為:命名空間://主機名/路徑 .都是在清單文件中配置的。
intent.setDataAndType(Uri.parse("itcast://cn.itcast/gaga"),"audio/mpeg");
//添加組件的category
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);
注意://設置數據類型
intent.setType("audio/mpeg");
//設置數據
intent.setData(Uri.parse("itcast://cn.itcast/gaga"));*/
上面兩個方法是互斥的,在設置數據和類型時,要使用setDataAndType()方法設置才可以。
例: 激活打電話意圖的方法:
public void click3(View view){
Intent intent = new Intent();
intent.setAction("android.intent.action.CALL");
intent.setData(Uri.parse("tel:12345"));
startActivity(intent);
}
例:激活發短信意圖的方法:
public void click4(View view){
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.BROWSABLE");
intent.setData(Uri.parse("sms:5556"));
intent.putExtra("sms_body","nihao haha");
startActivity(intent);
}
業務需求:將第一個頁面中的輸入的數據,在第二個頁面中顯示:
1、第一個頁面的activity類
public class DemoActivity extendsActivity {
privateEditText editText1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//獲取文本框組件
editText1 = (EditText) this.findViewById(R.id.editText1);
}
//點擊按鈕的事件方法,激活第二個組件。
publicvoid click(View view){
//獲取文本組件的值:
String name =editText1.getText().toString().trim();
//激活第二個意圖
Intent intent = newIntent(this,HelloActivty.class);
//在意圖中設置傳遞的值,就是傳遞的數據。
intent.putExtra("name",name);
//批量數據傳遞 ,使用Bundle 對象,相當於map集合。
Bundle extras = new Bundle();
extras.putString("name",name);
intent.putExtras(extras);
startActivity(intent);
}
}
2、第二個頁面的activity類:
public class HelloActivty extendsActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 獲取激活我的意圖:獲取激活本組件的意圖:
Intent intent = getIntent();
//根據key獲取在意圖中的數據
String name = intent.getStringExtra("name");
//獲取批量的數據
Bundle extras = intent.getExtras(); //獲取bundle對象。
String name = extras.getString("name");
//創建組件:
TextView tv = new TextView(this);
tv.setText("你好:"+name);
setContentView(tv);
}
}
1、業務需求:該activity中是聯系人名稱的列表,當選中一個聯系人時,關閉當前的activity,返回選中聯系人的姓名。在另外一個activity中獲取關閉的activity的返回值。
2、//要被關閉的activity:
public class ContactListActivity extendsActivity {
private ListView lv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_list);
lv = (ListView) this.findViewById(R.id.lv);
Uri uri =Uri.parse("content://com.android.contacts/raw_contacts");
Cursor cursor = this.getContentResolver().query(
uri,null, null, null, null);
final List
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex("_id"));
String name =
cursor.getString(cursor.getColumnIndex("display_name"));
//System.out.println(id);
System.out.println("姓名"+ name);
//System.out.println("--");
names.add(name);
}
cursor.close();
//為listView設置適配器:
lv.setAdapter(newArrayAdapter
//設置listView的點擊事件:
lv.setOnItemClickListener(newOnItemClickListener() {
@Override
publicvoid onItemClick(AdapterViewparent, View view,
intposition, long id) {
//獲取點擊列表的聯系人名稱
String name = names.get(position);
//設置當前activity被關閉的時候的結果數據
Intent data = new Intent();
data.putExtra("name", name);
//設置當前activity結果集的方法
方法參數:(結果碼,返回的數據)
setResult(position, data);
//關閉當前的activity
ContactListActivity.this.finish();
}
});
}
}
3、//接收關閉的activity返回值的activity:
public class DemoActivity extendsActivity {
privateEditText editText1,editText2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText1 = (EditText) this.findViewById(R.id.editText1);
editText2 = (EditText) this.findViewById(R.id.editText2);
}
//點擊按鈕開啟聯系人列表視圖
public void click(View view){
Intent intent = new Intent(this,ContactListActivity.class);
//啟動activity並可以獲取返回值的方法。
方法參數(視圖,請求碼)
startActivityForResult(intent,1);
}
public void click2(View view){
Intent intent = newIntent(this,ContactListActivity.class);
//startActivity(intent);
startActivityForResult(intent, 2);
}
//當新激活的界面銷毀,重新回到這個界面,會執行此方法,
該方法參數:
第一個參數:請求碼,對應上面startActivityForResult方法中設置的請求碼,用於區分是哪
個事件的操作。
第二個參數:結果碼,獲取銷毀頁面中setResult()方法中設置的結果碼。
第三參數:銷毀界面的返回值.
protected void onActivityResult(int requestCode, int resultCode, Intentdata) {
if(data!=null){
Toast.makeText(this, "點擊了第"+resultCode+"個條目", 0).show();
String name = data.getStringExtra("name");
if(requestCode==1)
editText1.setText(name);
if(requestCode==2)
editText2.setText(name);
}
super.onActivityResult(requestCode,resultCode, data);
}
}
1、activity生命周期中依次執行的方法:
onCreate :activity被創建時調用的方法
onStart :界面可見的時候調用
onResume :當界面獲取焦點時調用
onPause :當界面失去焦點時調用
onStop :當用戶看不到界面時調用。
onDestory:activity被銷毀時調用的方法.
當內存不足或結束結束進程時,會調用onDestory方法銷毀activity。
當一個界面創建出來後執行了onStop方法了,當再次被顯示出來時,先調用onRestart方法,然後是onStart、onResume 方法。
2、生命周期的應用場景:
當在播放視頻時來電,在onStop方法中暫停視頻 ,在電話打完,在onStart方法中將暫停的視頻重新播放。
八、activity橫豎屏切換的生命周期:
在默認的情況下,橫豎屏切換會先銷毀activity再創建activity;
為了在切換橫豎屏時,不銷毀activity要在清單文件配置:
android:configChanges="keyboardHidden|orientation"
android:name=".LifecycleActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name" >
當橫豎屏切換時會執行activity類中的onConfigurationChanged()方法:
//橫豎屏切換的activity類:
public class LifecycleActivity extendsActivity {
@Override
public voidonConfigurationChanged(Configuration newConfig) {
//TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
System.out.println("configchange");
}
}
在清單文件中指定:activity的樣式:
android:theme="@android:style/Theme.Dialog" //對話框樣式。
>
1、task任務棧:
Task (任務棧):一組任務的集合。 使用任務棧管理activity(任務),
Task任務棧主要用來存放已經打開的activity的引用,最近打開的activity處於任務棧的棧頂,棧頂的activity是用戶可見的activity。
通過任務棧系統可以管理應用程序的行為(管理應用程序如何打開,如何退出).
在activity類中 通過getTaskId()獲取任務棧的id。
2、Activity的啟動模式:
①、Standard:默認模式。
②、singleTop:如果task棧棧頂是activityB,再去開啟activityB,就不會創建新的activityB的實例。
當復用棧頂的組件時會調用activityB類中中的onNewIntent()方法.
例:浏覽器添加書簽的應用。
③、singleTask:當開啟新的activity的時候,首先判斷任務棧裡面是否存在要激活的activity,如果存在的話,就直接把這個已經存在的activity在任務棧中上面的其他activity都給清除掉,然後復用這個已經存在的activity。
應用場景:創建浏覽器的BrowserActivity實例使用該模式。
④、singleInstance模式:首先開啟一個activityA在任務棧A中,再開啟一個新的activityB,此時就會創建一個新的任務棧B,用於存放activityB,在任務棧A的棧頂保留了對activityB的引用。
任務棧模型:
基礎介紹異步消息處理線程是指,線程在啟動後會進入一個無線循環體中,沒循環一次,從內部的消息隊列中取出一個一個消息,並回調相應的消息處理函數,執行完一個消息後則繼續循環。如
主要思想:將一個view設計成多層:背景層,含中獎信息等;遮蓋層,用於刮獎,使用關聯一個Bitmap的Canvas在該Bitmap上,使用它的canvas.drawPat
新建項目前面,已經介紹了,系統相關配置,接下來就可以開始創建項目了。選擇新建—>構建一個自由風格的軟件項目,然後填寫項目名稱。項目如下:注意:項目配置源
Android 的菜單機制,在 Android 3.0 之前和之後有很大的去別,Android 3.0 推出 ActionBar ,導航的 UI 交互有很大的變化,但菜單