知道activity總要有一個xml的佈局文件相對應,但如果沒有這個xml 而用Java 直 接在代碼中簡單實現,也就是說,這個負責佈局的xml 現在我不在寫他。而是直接有java幫助我們生成,有些朋友會問,有這個必要麼,自己單寫個java 類實現不和xml 佈局是同樣的功能。但實際上,很多時候我們的界面不是完全不變的,如果一個view 中出現瞭大量的變化,那原來的xml 也就成瞭雞肋。而且一旦我們想要將寫好的一個activity自己封裝成JAR包,這時多餘的xml 很可能就變成瞭累贅。為解決這個問題,自己做瞭一點測試。感覺效果能簡單的解決這個問題,所以發出來,大傢權當參考。
在一個activity中在重寫的 onCreate 方法裡,我們必須將佈局文件指定進來 setContentView(R.layout.XXXX ); 現在我們將這個指定的xml 放棄。
java代碼:
Java代碼
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class IndexActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
newView view = newView.buildView(IndexActivity.this);
// 原來需要指定xml的地方,換成創建相應佈局的對象
setContentView(view);
Resources res = getResources();
// 指定加載的圖片
Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.back_1);
BitmapDrawable bmp1 = new BitmapDrawable(bmp);
view.imageView.setImageDrawable(bmp1);
}
// 這裡實驗瞭LinearLayout佈局,其他的佈局暫時沒做嘗試,不過基本原理類似
static class newView extends LinearLayout {
private ImageView imageView;
public newView(Context c) {
super(c);
/*
* 這裡隻創建瞭個ImageView 同理,如TextView EditText Button
* 等等都在這裡創建最後隻要添加到addView()中即可,補充下, 這裡創建的佈局規則同
*xml佈局時的規則相同。
*/
imageView = new ImageView(c);
/*
* 可以設定多種參數如大小,高度,顏色等等, 這些方法在android提供的api中很容易
* 找到,這裡列出幾種常用的
* TextView mTitle = new TextView(c);
* //添加文字
* mTitle.setText(title);
* //居中
* mTitle.setGravity(Gravity.CENTER);
* //字體顏色
* mTitle.setTextColor(Color.WHITE);
*
* addView實際有多種構造方法,對於位置變化的需求, 需要自己添加這裡舉例一個常用的
* addView(mTitle, new LinearLayout.LayoutParams(
* LayoutParams.WRAP_CONTENT,
* LayoutParams.WRAP_CONTENT,Gravity.CENTER_HORIZONTAL));
*/
addView(imageView);
/*
* 對於LinearLayout本身的屬性設置, 我們直接利用繼承後提供的方法,直接傳參數即可
* 如:setBackgroundResource(imgId); setPadding(0, 8, 0, 8);等
*/
}
public static newView buildView(Context c) {
return new newView(c);
}
}
}
作者“2528”