1. 程式人生 > >java 中的佈局

java 中的佈局

Java中佈局

1、佈局物件

LinearLayout layout = new LinearLayout(this);
// 設定方向
layout.setOrientation(LinearLayout.VERTICAL);

2、建立子檢視,需要使用佈局的佈局引數來設定寬高邊距之類之類的屬性

Button btn1 = new Button(this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams
.WRAP_CONTENT); lp.leftMargin = 20; //左外邊距 btn1.setLayoutParams(lp);

3、新增子檢視

layout.addView(btn2); //新增到末尾

4、移除檢視

layout.removeView(childView);
獲取孩子數,以及獲取某個下標對應的孩子物件
// 獲取孩子的個數
int childCount = layout.getChildCount();
// 孩子的下標從0開始,
View childView = layout.getChildAt(childCount - 1);
//移除
layout.removeView(childView);

移除全部

layout.removeAllViews();
Intent傳遞內容

在使用Intent跳轉時,可以是設定putExtras方法來傳遞內容
啟動頁面

Intent it = new Intent(MainActivity.this, Activity01.class);
it.putExtra("name", "張三"); //設定內容
it.putExtra("age", 20);
startActivity(it);

使用Bundle的方式傳遞
Intent it = new Intent(Activity01.this, Activity02.class);
//將資料全部設定到Bundle中
Bundle b = new Bundle(); b.putString("name", "李四"); b.putInt("age", 20); it.putExtras(b); //設定資料 startActivity(it); 被啟動介面,接收內容 //得到啟動該Activity的Intent物件 Intent it = getIntent(); String name = it.getStringExtra("name"); int age = it.getIntExtra("age", 0);

startActivityForResult

1、啟動頁面使用startActivityForResult方式啟動

Intent it2 = new Intent(Activity01.this, Activity02.class);
//第一個引數表示啟動Intent物件,第二個引數是請求碼(給Intent新增的編碼)
startActivityForResult(it2, 1);

2、被啟動介面正常處理資料,並在結束之前設定結果給啟動頁面

// 回傳內容
Intent it = new Intent();
it.putExtra("result", "從Activity02回來的內容:啦啦啦啦啦");
setResult(Activity.RESULT_OK, it);
finish();

3、啟動頁面上重寫onActivityResult方法接收結果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == 1){
            if(resultCode == RESULT_OK){
            String str = data.getStringExtra("result");
            tv.setText(str);
        }else{
            tv.setText("使用者取消");
        }
    }
}

Activity的launchMode
Activity的啟動模式,直接操作Activity在棧中的情況
配置方式

<activity
        android:name="com.xykj.apidemo.Activity01"
        ...
        android:launchMode="singleTop" />
檢視Activity棧的情況:adb shell dumpsys activity > D:/log1805281648.txt
搜尋Running activities找打自己的應用包名

standar:預設,可以在棧中建立多個Activity,每啟動一個Activity都會在棧中建立一個Activity物件

singleTop:如果當前Activity已經在棧頂,則不再建立Activity物件而是直接觸發其onNewIntent方法

singleTask:配置該啟動模式的Activity一般要配合android:taskAffinity屬性來使用,並且taskAffinity要跟應用包名不一樣(如:com.test),這樣該Activity將會
放到新棧(如名字com.test)的棧底,然後該Activity啟動其他普通的Activity的話那麼其他的也會被放到該新棧中

<activity
        android:name="com.xykj.apidemo.Activity02"
        android:label="Activity02"
        android:taskAffinity="com.test"
        android:launchMode="singleTask" />

singleInstance:跟singleTask類似,唯一的區別是新增來該啟動模式的Activity會被放在新棧中,並且新棧中有且只有該Activity一個物件