《第一行程式碼(第二版)》的學習(一)
阿新 • • 發佈:2019-01-28
- application中
android:supportsRtl=“true” Rtl = right - to - left
從右向左的佈局;不要使用margin right 使用 margin end - ID
你需要在XML中引用一個id,就使用@id/id_name;
你需要在XML中定義一個id,就使用@+id/id_name; - 在活動中使用menu:
①res-新建menu-新建xml-編寫選單的item
②重寫兩個方法
onCreateOptionsMenu()
onOptionsItemSelected()
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/add" android:title="add"></item>
<item android:id="@+id/remove" android:title="remove"></item>
</menu>
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.add:
Toast.makeText(this, "add", Toast.LENGTH_SHORT).show();
case R.id.remove:
Toast.makeText(this, "remove", Toast.LENGTH_SHORT).show();
}
return true;
}
- Intent < data >標籤
android:scheme 用於指定資料的協議部分,如:http、geo(顯示地理位置)、tel(撥打電話)等
android:host 用於指定資料的主機名部分,如:www.baidu.com
android:port 用於指定資料的埠部分,一般緊隨在主機名之後
android:path 用於指定主機名和埠之後的部分,如:一段網址中跟在域名之後的內容
android:mimeType 用於指定可以處理的資料型別,允許使用萬用字元的方式進行指定 - 返回鍵的監聽back
重寫onBackPressed()方法 - 生命週期
onCreate() 活動在第一次建立的時候被呼叫,完成 初始化操作,如:載入佈局、繫結事件等
onStart() 檢視由不可見變為可見
onResume() 位於返回棧的棧頂,並處於執行狀態
onPause() 釋放掉一些消耗CPU的資源,儲存一些關鍵的資料,但這個方法執行的速度要快,不然會影響到新的棧頂活動的呼叫
onStop() 如果啟動的活動是一個對話方塊式的活動,那麼onPause()方法會得到執行,而onStop()方法不會被執行
onDestroy()
onRestart() 在活動由停止狀態變為執行狀態之前呼叫
★在onStart()方法中對資源進行載入,在onStop()方法中對資源進行釋放,可以保證處於停止狀態的活動不會佔用過多記憶體 活動的啟動模式
standard 系統不會在乎這個活動是否已經在返回棧中存在,每次啟動都會建立該活動的一個新的例項
singleTop 在啟動活動時如果發現返回棧的棧頂已經是該活動,則認為可以直接使用它,不會再建立新的活動例項
singleTask 每次啟動該活動時系統首先會在返回棧中檢查是否存在該活動的例項,如果發現已經存在則直接使用該例項,並把在這個活動之上的所有活動統統出棧,如果沒有發現就會建立一個新的活動例項
singleInstance 在這種模式下會有一個單獨的返回棧來管理這個活動,不管是哪個應用來訪問這個活動,都共用的同一個返回棧,同時解決了共享活動例項的問題getClass().getSimpleName() 獲取當前活動的名字
- 隨時隨地退出程式
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
/**
* Created by J on 2016/12/27.
*/
public class ActivityCollector {
public static List<Activity> mActivities = new ArrayList<>();
public static void addActivity(Activity activity){
mActivities.add(activity);
}
public static void removeActivity(Activity activity){
mActivities.remove(activity);
}
public static void finishAll(){
for (Activity activity:mActivities) {
if (!activity.isFinishing()){
activity.finish();
}
}
}
}
import android.app.Activity;
import android.os.Bundle;
import com.juice.mytreasure.utils.ActivityCollector;
/**
* Created by J on 2016/12/18.
*/
public abstract class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(setView());
ActivityCollector.addActivity(this);
init();
setDatas();
}
protected abstract void setDatas();
protected abstract void init();
protected abstract int setView();
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.finishAll();
}
}
- 啟動活動的最佳寫法
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import com.juice.mytreasure.R;
/**
* Created by J on 2016/12/27.
*/
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_second);
}
public static void actionStart(Context context,String data1,String data2){
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra("param1",data1);
intent.putExtra("param2",data2);
context.startActivity(intent);
}
}
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SecondActivity.actionStart(MainActivity.this,"data1","data2");
}
});