Android中使用Java代碼對介面進行布局__Java

來源:互聯網
上載者:User

在日常的開發中我們經常直接使用xml對介面進行布局,但是使用這種布局方式就直接把布局寫死了,不能靈活的進行頁面元素的展示,比如根據從伺服器中請求Json資料的不同進行動態顯示配置樣式,額,當然使用的頻率也不算太高,當然,對於一名合格的程式員當然要掌握任何一種開發中能夠使用到的技能。

這次我們通過實現一個簡單的登陸頁面,來學習一下Android中使用代碼進行布局並記錄下涉及到的知識點。

下面看一下啟動並執行實際效果:

先貼上本次項目的實際代碼,後面進行詳細說明:

/** * 使用代碼進行登入介面的布局 * @author wangke */public class CodeLayoutActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //建立一個最外層的根布局        LinearLayout rootLayout = new LinearLayout(this);        rootLayout.setBackgroundColor(Color.CYAN);        //設定線性布局中子View的擺放為豎直方向        rootLayout.setOrientation(LinearLayout.VERTICAL);        //建立一個根部局的LayoutParams        LinearLayout.LayoutParams rootParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);        //設定根部局的Margin值        rootParams.setMargins(DensityUtil.dip2px(this,5),DensityUtil.dip2px(this,5),DensityUtil.dip2px(this,5),DensityUtil.dip2px(this,5));        rootParams.gravity = Gravity.CENTER_HORIZONTAL;        rootLayout.setLayoutParams(rootParams);        //設定最外層根部局布局的背景顏色        rootLayout.setBackgroundColor(Color.CYAN);        //將當前建立的根部局設定給Activity        setContentView(rootLayout);        //建立一個顯示帳戶圖片的ImageView        ImageView ivIco = new ImageView(this);        ivIco.setImageResource(R.drawable.ico);        //將建立的用於顯示頭像的ImageView添加到最外層的線性布局中        rootLayout.addView(ivIco);        //當通過子View進行擷取所在的布局的時候,rootLayout.addView(ivIco)需要寫在前面,原因想起來也很清楚,當前的ImageView都還沒有添加到父View如果直接通過getLayoutParams()當然會出先null 指標異常(可以查看源碼)        LinearLayout.LayoutParams ivParams = (LinearLayout.LayoutParams) ivIco.getLayoutParams();        //給用於顯示頭像的ImageView設定寬高        ivParams.width = DensityUtil.dip2px(this,100f);        ivParams.height = DensityUtil.dip2px(this,100f);        //設定置中的方式(子View在父View下的擺放方式為水平置中)        ivParams.gravity = Gravity.CENTER_HORIZONTAL;        ivParams.setMargins(0,DensityUtil.dip2px(this,100),0,0);        ivIco.setLayoutParams(ivParams);        //建立水平排列的線性布局,用於放置賬戶相關的View        LinearLayout userCountLayout = new LinearLayout(this);        userCountLayout.setOrientation(LinearLayout.HORIZONTAL);        //將當前的建立的線性布局添加到根View        rootLayout.addView(userCountLayout);        //顯示使用者名稱的TextView        TextView tvShowUser = new TextView(this);        tvShowUser.setText("使用者名稱:");        userCountLayout.addView(tvShowUser);        LinearLayout.LayoutParams userCountlayoutParams = (LinearLayout.LayoutParams) tvShowUser.getLayoutParams();        userCountlayoutParams.setMargins(DensityUtil.dip2px(this,20),DensityUtil.dip2px(this,20),DensityUtil.dip2px(this,20),DensityUtil.dip2px(this,20));        //建立用於填寫使用者賬戶的EditText        EditText edtUserCount = new EditText(this);        userCountLayout.addView(edtUserCount);        edtUserCount.setHint("請輸入使用者名稱");        LinearLayout.LayoutParams edtUserCountlayoutParams = (LinearLayout.LayoutParams) edtUserCount.getLayoutParams();        edtUserCount.setWidth(0);        edtUserCountlayoutParams.weight = 1;        //父View的Gravity屬性,確定子View的擺放規則        edtUserCountlayoutParams.gravity = Gravity.CENTER_VERTICAL;        //View.setGravity方法相當於  android:gravity="center",該屬性工作表示對View中內容進行的限定//        edtUserCount.setGravity(Gravity.CENTER);        //建立線性布局用於容納密碼相關的View        LinearLayout pwdLayout =  new LinearLayout(this);        pwdLayout.setGravity(LinearLayout.HORIZONTAL);        LinearLayout.LayoutParams pwdLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);        pwdLayout.setLayoutParams(pwdLayoutParams);        rootLayout.addView(pwdLayout);        //TextView顯示密碼文本        TextView tvShowPwd = new TextView(this);        tvShowPwd.setText("密    碼:");        pwdLayout.addView(tvShowPwd);        LinearLayout.LayoutParams tvShowPwdParams = (LinearLayout.LayoutParams) tvShowPwd.getLayoutParams();        tvShowPwdParams.setMargins(DensityUtil.dip2px(this,20),DensityUtil.dip2px(this,20),DensityUtil.dip2px(this,20),DensityUtil.dip2px(this,20));        tvShowPwdParams.gravity = Gravity.CENTER_VERTICAL;        //EdtText用於輸入密碼        EditText edtPwd = new EditText(this);        edtPwd.setHint("請輸入密碼");        pwdLayout.addView(edtPwd);        //使用new的方式來擷取 LayoutParams        LinearLayout.LayoutParams edtPwdParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);        //設定權重        edtPwdParams.weight = 1;        edtPwdParams.width = 0;        //將布局參數設定給EdtText        edtPwd.setLayoutParams(edtPwdParams);        //用於進行登入的button        Button btnLogin = new Button(this);        btnLogin.setText("登陸");        rootLayout.addView(btnLogin);        LinearLayout.LayoutParams btnLoginParams = (LinearLayout.LayoutParams) btnLogin.getLayoutParams();        //設定Button的大小        btnLoginParams.width = LinearLayout.LayoutParams.WRAP_CONTENT;        btnLoginParams.height= LinearLayout.LayoutParams.WRAP_CONTENT;        btnLoginParams.gravity = Gravity.CENTER_HORIZONTAL;    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.