2025-04-23

知道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”
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *