Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 高級開發 >> android開發--布局

android開發--布局

編輯:高級開發

 android應用開發3

  使用Bundle在Activity間傳遞數據

  從源Activity 中傳遞數據

  Java代碼

  1. //數據寫入Intent

  2. Intent openWelcomeActivityIntent=new Intent();

  3. Bundle myBundelForName=new Bundle();

  4. myBundelForName.putString("Key_Name",inName.getText().toString());

  5. myBundelForName.putString("Key_Age",inAge.getText().toString());

  6. openWelcomeActivityIntent.putExtras(myBundelForName);

  7. openWelcomeActivityIntent.setClass(androidBundel.this, Welcome.class);

  8. startActivity(openWelcomeActivityIntent);

  //數據寫入Intent

  Intent openWelcomeActivityIntent=new Intent();

  Bundle myBundelForName=new Bundle();

  myBundelForName.putString("Key_Name",inName.getText().toString());

  myBundelForName.putString("Key_Age",inAge.getText().toString());

  openWelcomeActivityIntent.putExtras(myBundelForName);

  openWelcomeActivityIntent.setClass(androidBundel.this, Welcome.class);

  startActivity(openWelcomeActivityIntent);

  目標Activity 中獲取數據

  Java代碼

  1. //從Intent 中獲取數據

  2. Bundle myBundelForGetName=this.getIntent().getExtras();

  3. String name=myBundelForGetName.getString("Key_Name");

  4. myTextVIEw_showName.setText("歡迎您進入:"+name);

  //從Intent 中獲取數據

  Bundle myBundelForGetName=this.getIntent().getExtras();

  String name=myBundelForGetName.getString("Key_Name");

  myTextVIEw_showName.setText("歡迎您進入:"+name);

  使用Bundle在Activity間傳遞數據2

  從源請求Activity 中通過一個Intent 把一個服務請求傳到目標Activity 中

  Java代碼

  1. private Intent toNextIntent;//Intent 成員聲明

  2. toNextIntent=new Intent();//Intent 定義

  3. toNextIntent.setClass(TwoActivityME3.this, SecondActivity3.class);

  接上頁

  4. //設定開啟的下一個Activity

  5. startActivityForResult(toNextIntent, REQUEST_ASK);

  6. //開啟Intent 時候,把請求碼同時傳遞

  private Intent toNextIntent;//Intent 成員聲明

  toNextIntent=new Intent();//Intent 定義

  toNextIntent.setClass(TwoActivityME3.this, SecondActivity3.class);

  //設定開啟的下一個Activity

  startActivityForResult(toNextIntent, REQUEST_ASK);

  //開啟Intent 時候,把請求碼同時傳遞

  在源請求Activity 中等待Intent 返回應答結果,通過重載onActivityResult()方法

  第一個參數是你開啟請求Intent時的對應請求碼,可以自己定義。

  第二個參數是目標Activity返回的驗證結果碼

  第三個參數是目標Activity返回的Intent

  目標Activity 中發送請求結果代碼,連同源Activity 請求的數據一同綁定到Bundle

  中通過Intent 傳回源請求Activity 中

  Log與DDMS(查看Log等信息)

  Java代碼

  1. @Override

  2. protected void onActivityResult(int requestCode,

  3. int resultCode, Intent data) {

  4. // TODO Auto-generated method stub

  5. super.onActivityResult(requestCode, resultCode, data);

  6. if(requestCode==REQUEST_ASK){

  7. if(resultCode==RESULT_CANCELED){

  8. setTitle("Cancel****");

  9. }else if(resultCode==RESULT_OK){

  10. showBundle=data.getExtras();//從返回的Intent中獲得Bundle

  11. Name=showBundle.getString("myName");//從bundle中獲得相應數據

  12. text.setText("the name get from the second layout:"+Name);

  13. }

  14. }

  15. }

  @Override

  protected void onActivityResult(int requestCode,

  int resultCode, Intent data) {

  // TODO Auto-generated method stub

  super.onActivityResult(requestCode, resultCode, data);

  if(requestCode==REQUEST_ASK){

  if(resultCode==RESULT_CANCELED){

  setTitle("Cancel****");

  接上頁

  }else if(resultCode==RESULT_OK){

  showBundle=data.getExtras();//從返回的Intent中獲得Bundle

  Name=showBundle.getString("myName");//從bundle中獲得相應數據

  text.setText("the name get from the second layout:"+Name);

  }

  }

  }

  Java代碼

  1. backIntent=new Intent();

  2. stringBundle=new Bundle();

  3. stringBundle.putString("myName", Name);

  4. backIntent.putExtras(stringBundle);

  5. setResult(RESULT_OK, backIntent);//返回Activity結果碼

  6. finish();

  backIntent=new Intent();

  stringBundle=new Bundle();

  stringBundle.putString("myName", Name);

  backIntent.putExtras(stringBundle);

  setResult(RESULT_OK, backIntent);//返回Activity結果碼

  finish();

  Java代碼

  1. Log.v("TAG", "nextPage_Activity onStart()");//設置標簽來跟蹤程序

  Log.v("TAG", "nextPage_Activity onStart()");//設置標簽來跟蹤程序

  Activity生命周期

  Activity 狀態

  ① 當一個Activity 在屏幕的最上層時(對堆棧的最頂端),它就是屬於active 或者running 的狀態

  ② 如果一個Activity 失去焦點(focus)但還看得到它的畫面(比如:一個新的Activity 畫面並不是全

  屏幕或者它是一個半透明的情況),那失去焦點的Activity 則處在paused 的狀態。像這個失去焦點的Activity

  它還是完全活著的,並沒有消失。(活著的意思是指,Activity 自己本身所有的狀態及數據都還是存在的,也

  跟窗口管理程序window manager 保持聯系著),像這種paused 的Activity,會在一種情況下消失,那就是當

  系統的內存不夠用之時,系統會自動判斷,八部重要的Activity 移除。

  ③ 如果一個Activity 被其它的Activity 完全的遮蓋住時,它仍然保有全部的狀態及數據,但因為它已

  不再被使用者看見,所以它的畫面是被隱藏起來的(畫面不需要更新),當系統內存不足時,這種stop 狀態

  的Activity 時最先被系統考慮拿下來釋放內存的。

  ④ 當一個Activity 處於pause 或stop 的狀態時,系統可以要求Activity 結束(finish)或直接移除(kill)

  接上頁

  它。當它需要再度呈現在使用者面前時,它必須要能完整的重新啟動及回復先前的狀態。

  Activity 狀態轉換圖

  android應用開發4使用Service

  什麼是服務(Service)

  服務是運行在後台的一段代碼。它可以運行在它自己的進程,也可以運行在其他應用程序的上下文

  (context)裡面,這取決於自身的需要。其他的組件可以綁定到一個服務(Service)上面,通過遠程過程調

  用(RPC)來調用這個方法。例如:媒體播放器的服務,當用戶退出媒體選擇用戶界面,仍然希望音樂可以

  繼續播放,這時就是由服務(Service)來保證當用戶界面關閉時音樂繼續播放的。

  如何使用服務

  第一種是通過調用Context.startServece()啟動,調用Context.stoptService()結束,startService()可以傳遞參

  數給Service。

  第二種方式是通過調用Context.bindService()啟動,調用Context.unbindService()結束,還可以通過

  ServiceConnection 訪問Service。二者可以混合使用,比如說我可以先startServece()再unbindService()。

  Service的生命周期

  startService()後,即使調用startService()的進程結束了,Service 仍然還存在,知道有進程調用

  stoptService(),或者Service 自己自殺(stopSelf())就沒法了

  bindService()後,Service 就和調用bindService()的進程同生共死,也就是說當調用bindService()的進

  程死了,那麼它bind 的Service 也要跟著被結束,當然期間也可以調用unbindService()讓Service 結

  束

  兩種方式混合使用時,比如說你startService()了,我bindService()了,那麼只有你stoptService()了而

  且我也unbindService()了,這個Service 才會被結束。

  進程生命周期

  android 系統將會嘗試保留那些啟動了的或者時綁定了的服務進程

  如果該服務正在進程的onCreate(),onStart()或者onDestroy()這些方法中執行時,那麼主進程將會成為

  一個前台進程,以確保此代碼不會被停止

  如果服務已經開始,那麼它的主進程會就重要性而言低於所有可見的進程但高於不可見的進程,由

  於只有少數幾個進程是用戶可見的,所以只要不是內存特別低,該服務不會停止。

  如果有多個客戶端綁定了服務,只要客戶端中的一個對於用戶是可見的,即認為該服務可見

  接上頁

  使用服務進行音樂播放

  Manifest.XML

  中的Service

  定義

  XML代碼

  1. < service android:name=".Music">

  2. < intent-filter>

  3. < action android:name="com.liangshan.wuyong.START_AUDIO_SERVICE" />

  4. < category android:name="android.intent.category.default" />

  5. < /intent-filter>

  6. < /service>

  < service android:name=".Music">

  < intent-filter>

  < action android:name="com.liangshan.wuyong.START_AUDIO_SERVICE" />

  < category android:name="android.intent.category.default" />

  < /intent-filter>

  < /service>

  Service 子類

  中的Player

  Java代碼

  1. public void onStart(Intent intent, int startId) {

  2. super.onStart(intent, startId);

  3. player = MediaPlayer.create(this, R.raw.seven_days);

  4. player.start();

  5. }

  6. public void onDestroy() {

  7. super.onDestroy();

  8. player.stop();

  9. }

  public void onStart(Intent intent, int startId) {

  super.onStart(intent, startId);

  player = MediaPlayer.create(this, R.raw.seven_days);

  player.start();

  }

  public void onDestroy() {

  super.onDestroy();

  player.stop();

  }

  Activity 中定

  義的Intent

  開啟相應的

  Service

  引用

  startService(new Intent("com.liangshan.wuyong.START_AUDIO_SERVICE"));

  stopService(new Intent("com.liangshan.wuyong.START_AUDIO_SERVICE"));

  androidUI布局

  Activity

  android 應用程序基本功能單元

  本身沒有任何屏幕存在

  View 和VIEwgroup

  表示在android 平台上的基本用戶界面單元

  VIEws

  接上頁

  android.view.VIEw

  為指定的屏幕矩形區域存儲布局和內容

  處理尺寸和布局,繪制,焦點改變,翻屏,按鍵、手勢

  widget 基類

  VIEwgroups

  android.view.VIEwgroup

  包含並管理下級系列的Views 和其他VIEwgroup

  布局的基類

  UI樹狀結構

  android 中的Activity

  定義使用一個view 和IEwgroup 的樹狀節點

  setContentVIEw()方法

  被Activity 調用來把樹狀節點連接到屏幕渲染

  文本TextVIEw 輸入框EditText

  輸入法InputMethod 活動方法MovementMethod

  按鈕Button 單選按鈕RadioButton

  復選框Checkbox 滾動視圖ScrollVIEw

  LayoutParams (布局參數)

  每一個viewgroup 類使用一個繼承於VIEwGroup.LayoutParams 的嵌套類

  包含定義了子節點VIEw 的尺寸和位置的屬性類型

  普通布局對象

  FrameLayout

  最簡單的布局對象

  在屏幕上故意保留的空白空間,你可以之後填充一個單獨的對象

  例如:一個你要更換的圖片

  所有子元素都釘到屏幕的左上角

  不能為子元素指定位置

  LinearLayout

  在一個方向上(垂直或水平)對齊所有子元素

  所有子元素一個跟一個地堆放

  一個垂直列表每行將只有一個子元素(無論它們有多寬)

  一個水平列表只是一列的高度(最高子元素的高度來填充)

  TableLayout

  把子元素放入到行與列中

  不顯示行、列或是單元格邊界線

  單元格不能橫跨行,如Html 中一樣

  AbsoluteLayout

  使子元素能夠指明確切的X / Y 坐標顯示在屏幕上

  (0,0)是左上角

  當你下移或右移時,坐標值增加

  允許元素重疊(但是不推薦)

  注意:

  一般建議不使用AbsoluteLayout 除非你有很好的理由來使用它

  因為它相當嚴格並且在不同的設備顯示中不能很好地工作

  RelativeLayout

  讓子元素指定它們相對於其他元素的位置(通過ID 來指定)或相對於父布局對象

  androidManifest.XML 中修改程序布局的Theme 主題

  XML代碼

  接上頁

  1. < ?XML version="1.0" encoding="utf-8"?>

  2. < manifest

  3. XMLns:android="http://schemas.android.com/apk/res/android"

  4. package="zyf.GridVIEwTest"

  5. android:versionCode="1"

  6. android:versionName="1.0">

  7. < application android:icon="@drawable/icon"

  8. android:theme="@android:style/Theme.Light"

  9. android:label="@string/app_name" >

  10. < activity android:name=".GridVIEwTest"

  11. android:label="@string/app_name" >

  12. < intent-filter>

  13. < action android:name="android.intent.action.MAIN" />

  14. < category

  15. android:name="android.intent.category.LAUNCHER" />

  16. < /intent-filter>

  17. < /activity>

  18. < /application>

  19. < uses-sdk android:minSdkVersion="2" />

  20. < /manifest>

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved