android動態佈局

android動態佈局
不知道各位有沒有碰到過這樣的問題:在一個佈局中添加多個子佈局,每一個子布
局有兩種樣式,好比正面一個樣式,點擊後,替換到背面又是另外一種樣式。且需
要使得這些子佈局始終只有一個是保持背面的狀態,點擊其餘子佈局時它纔會回到正面樣式。
最開始,我選擇了用xml佈局文件先擬好一個空的佈局框架,而後再在代碼中動態的添加不一樣信息,可是這樣的話,涉及一個問題,我不停的在將內容(文字、
圖片)添加進去,那麼個人內存消耗會很是大,而前面所佔用的內存又不能銷燬,這樣,程序很容易報內存溢出的錯。
一 般佔內存的都是圖片,因此我先想到的,是將圖片再壓縮小一倍,這樣試下來的結果不錯,運行的時候沒有再報錯了,可是當我回退到前一個activity後, 再點擊這個模塊,點擊幾回後,又開始報內存溢出的錯誤,因而我不得不從新尋找其餘的方法來解決Android上最使人頭疼的內存溢出報錯。
後來, 決定將每一個子佈局封裝成一個ViewGroup,要用到這個佈局的時候,纔將它顯示,不用的時候便它從parent佈局中remove掉,這樣不須要重複的去建立添加,不會浪費內存,並且能夠省去重複代碼的工做,下面言歸正傳。
一、 先將子佈局封裝:
private ViewGroup builtView(int index,int width,intheight,int x,int y,Boolean clicks)

index爲子佈局的id,width、height爲該子佈局的寬、高,x、y爲該子佈局在屏幕中的座標,clicks則是判斷該子佈局的正面是否被點擊。
二、 用代碼編寫佈局文件:
RelativeLayout parent = newRelativeLayout(getApplicationContext());
Parent.setId(index);//設定id
//設定佈局的寬、高,並將它添加到父佈局中
RelativeLayout.LayoutParams rl = newRelativeLayout.LayoutParams(width,height);
parent.setLayoutPramas(rl);
//設定子佈局的座標
rl.leftMargin = x;
rl.leftMaigin = y;
//判斷點擊的是正面仍是反面
if(clicktime == true){
//先將以前的內容remove掉
parent.removeAllViews();
//例如:添加一段文字在佈局中
TextView tv = newTextView(getApplicationContext());
tv.setId(index +1);
tv.setText(「TextView1」);
tv.setTextSize(20);
tv.setTextColor(Color.WHITE);
//TextView佈局
RelativeLayout.LayoutParams tv_params = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
tv_params.addRule(RelativeLayout.ALIGN_PARENT_BOTOOM);
tv.setLayoutParams(tv_params);
//將TextVIew添加到佈局中
Parent.addView(tv);
}else{
//反面佈局
}

三、 //指定在哪一個佈局文件中進行動態更新[java] LayoutInflater inflater = getLayoutInflater();
View mainView = inflater.inflate(R.layout.main,null);
setContentView(mainView);
//將封裝的ViewGroup放到ArrayList中,一個List存放正面,一個List存放背面:
ArrayList lsit1 = newArrayList();
ArrayList lsit2 = newArrayList();
//將參數設進佈局:
ViewGroup vg1 = builtView(0,width,height,x,y,true);
//將ViewGroup放入list1中:
list1.add(vg1);
//背面同上
… …

四、 對子佈局進行操做:先將肯定對list1中哪一個ViewGroup進行操做,對該
ViewGroup進行點擊監聽,在監聽的時候,先判斷是正面仍是反面,若是是正面,就顯示正面的樣式,若是是反面就顯示反面的樣式。
五、 在點擊替換樣式的時候,先將佈局清空,在將ViewGroup添加進去進行顯示。
實現後的效果很好,沒有再報內存溢出的錯java