java 中的佈局
阿新 • • 發佈:2019-02-07
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一個物件