標籤:android開發 安卓 手機 xml
【1】Activity的生命週期
Activity作為android系統的表現層組件有著至關重要的地位,因為他直接和使用者接觸。一個Activity在被建立和銷毀的過程中經曆了7個過程,他們分別是oncreat(activity建立後第一個被調用的函數),onstart(當activity顯示在介面上的時候被調用),onrestart(從停止到活動調用),onresume(能夠和使用者進行互動的時候調用),onpause(進入暫停態的時候被調用),onstop(進入停止態的時候被調用),ondestroy(進入非使用中前被調用)。
假如說我們要在某個activity載入的時候做一些工作,那我們可以重載他的oncreat函數,像下面這樣:
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);baseSetContentView(R.layout.login_activity_layout);initHttpHandler();initView();}
上面的initHttpHandler()和initView()是我們加上去的,這樣系統在建立這個activity的時候就會調用他們。
【2】初始化介面資源
安卓的介面資源用xml語言描述,xml語言很適合用來組織 key-value 形式的資料。介面資源說白了也就是一堆描述性的檔案,比如:介面元素的名字,大小,位置等等。我們要想在程式裡面更該或者是擷取介面元素就得做一些初始化的工作,也就是給這些元素取一些別名。比如像下面這樣的:
ImageButton logbutton=(ImageButton)findViewById(R.id.imageButton1);
我們在程式裡面定義一個叫logbutton的對象,實際上就是對介面資源裡面的登入按鈕做了引用。這樣我們就能在程式裡面通過logbutton對象來操作登入按鈕。
注意,定義這個對象要在 setContentView(R.layout.activity_main) 之後。
這裡還有值得熟悉的是安卓常用的介面設計基礎知識,因為我們常要適應不同螢幕尺寸的手機所以在介面布局方面為了兼顧美觀和適應性一般採用相對布局方案。
Android RelativeLayout 屬性
// 相對於給定ID控制項
android:layout_above 將該控制項的底部置於給定ID的控制項之上;
android:layout_below 將該控制項的底部置於給定ID的控制項之下;
android:layout_toLeftOf 將該控制項的右邊緣與給定ID的控制項左邊緣對齊;
android:layout_toRightOf 將該控制項的左邊緣與給定ID的控制項右邊緣對齊;
android:layout_alignBaseline 將該控制項的baseline與給定ID的baseline對齊;
android:layout_alignTop 將該控制項的頂部邊緣與給定ID的頂部邊緣對齊;
android:layout_alignBottom 將該控制項的底部邊緣與給定ID的底部邊緣對齊;
android:layout_alignLeft 將該控制項的左邊緣與給定ID的左邊緣對齊;
android:layout_alignRight 將該控制項的右邊緣與給定ID的右邊緣對齊;
// 相對於父組件
android:layout_alignParentTop 如果為true,將該控制項的頂部與其父控制項的頂部對齊;
android:layout_alignParentBottom 如果為true,將該控制項的底部與其父控制項的底部對齊;
android:layout_alignParentLeft 如果為true,將該控制項的左部與其父控制項的左部對齊;
android:layout_alignParentRight 如果為true,將該控制項的右部與其父控制項的右部對齊;
// 置中
android:layout_centerHorizontal 如果為true,將該控制項的置於水平置中;
android:layout_centerVertical 如果為true,將該控制項的置於垂直置中;
android:layout_centerInParent 如果為true,將該控制項的置於父控制項的中央;
// 指定移動像素
android:layout_marginTop 上位移的值;
android:layout_marginBottom 下位移的值;
android:layout_marginLeft 左位移的值;
android:layout_marginRight 右位移的值;
example:
android:layout_below = "@id/***"
android:layout_alignBaseline = "@id/***"
android:layout_alignParentTop = true
android:layout_marginLeft = “10px”
【3】註冊控制項監聽事件
為了監聽使用者的動作,我們必須註冊監聽函數。常用的監聽函數有 setOnClickListener()setOnFocusChangeListener() addTextChangedListener() 以及觸摸事件。
監聽註冊有好幾種寫法,這裡推薦一種統一處理函數的寫法。即實現相應Listener的介面,註冊控制項的事件,重載裡面的響應事件。比如說buttom的onclick()函數。
public class MainActivity extends ActionBarActivity implements OnClickListener
實現介面
Button log_button=(Button)findViewById(R.id.button1); log_button.setOnClickListener(this);
註冊事件
@Overridepublic void onClick(View v) {// TODO Auto-generated method stubToast.makeText(getApplicationContext(), "log", Toast.LENGTH_LONG).show(); Intent intent=new Intent(MainActivity.this,MenuActivity.class); startActivity(intent); }
重載事件
【4】Activity之間的跳轉
介面之間的跳轉是app中非常重要的環節,通過intent機制從一個activity啟動另一個activity很簡單,代碼如下:
Intent intent=new Intent(MainActivity.this,MenuActivity.class); startActivity(intent);
這是顯式啟動一個activity,還有隱式啟動,子啟動。
【5】handle訊息機制
handle訊息機制是安卓裡面重要的處理序間通訊的方式,通過handle我們可以輕鬆的發送訊息給指定的目標。
發送方:
Message msg = handler.obtainMessage();msg.what = MessageCode.RESIZE;msg.arg1 = change;msg.sendToTarget();
接收方需要重載handleMessage函數
//接受處理資訊函數 @Override public void handleMessage(Message message) { LoginActivity theActivity = mActivity.get(); if(theActivity == null) return; //接收到登入訊息if(message.what == MessageCode.LOGIN)
【6】資料的儲存
安卓儲存資料有5種方式,他們分別是:
1 使用SharedPreferences儲存資料
2 檔案儲存體資料
3 SQLite資料庫儲存資料
4 使用ContentProvider儲存資料
5 網路儲存資料
其中SharedPreferences是Android平台上一個輕量級的儲存類,主要是儲存一些常用的配置比如視窗狀態,一般在Activity中 重載視窗狀態onSaveInstanceState儲存一般使用SharedPreferences完成,它提供了Android平台常規的Long長 整形、Int整形、String字串型的儲存。 它是什麼樣的處理方式呢? SharedPreferences類似過去Windows系統上的ini設定檔,但是它分為多種許可權,可以全域共用訪問,android123提示最終是以xml方式來儲存,整體效率來看不是特別的高,對於常規的輕量級而言比SQLite要好不少,如果真的儲存量不大可以考慮自己定義檔案格式。xml 處理時Dalvik會通過內建底層的本地XML Parser解析,比如XMLpull方式,這樣對於記憶體資源佔用比較好。它的本質是基於XML檔案儲存體key-value鍵值對資料,通常用來儲存一些簡單的配置資訊。其儲存位置在/data/data/<包名>/shared_prefs目錄下。SharedPreferences對象本身只能擷取資料而不支援儲存和修改,儲存修改是通過Editor對象實現。
實現SharedPreferences儲存的步驟如下:
1 據Context擷取SharedPreferences對象
2 edit()方法擷取Editor對象。
3 EditorObject Storage Servicekey-value鍵值對資料。
4 commit()方法提交資料。
public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //擷取SharedPreferences對象 Context ctx = MainActivity.this; SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE); //存入資料 Editor editor = sp.edit(); editor.putString("STRING_KEY", "string"); editor.putInt("INT_KEY", 0); editor.putBoolean("BOOLEAN_KEY", true); editor.commit(); //返回STRING_KEY的值 Log.d("SP", sp.getString("STRING_KEY", "none")); //如果NOT_EXIST不存在,則傳回值為"none" Log.d("SP", sp.getString("NOT_EXIST", "none")); }}