如何在 java 而不是 xml 中编码相对布局?

How to code Relative layout in java, instead of xml?

我想 运行 使用 Java 代码而不是 XML 文件来应用程序。
该应用程序无法在我的 phone/emulator 上运行并且每次都崩溃。

代码如下所示:

package com.nikhil.relativelayoutjavacode;

import android.support.v7.app.ActionBarActivity;    
import android.os.Bundle;    
import android.view.Menu;     
import android.view.MenuItem;     
import android.widget.Button;     
import android.widget.EditText;     
import android.widget.RelativeLayout;       
import android.widget.RelativeLayout.LayoutParams;       
import android.widget.TextView;      

public class MainActivity extends ActionBarActivity {

    RelativeLayout main;
    EditText userNameValue, passwordValue;
    TextView message, userName, password;
    LayoutParams messageDimensions;
    Button login;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        init();
        createMessageTextView();
        main.addView(message, messageDimensions);
        setContentView(main);
    }

    private void init() {
        // TODO Auto-generated method stub
        main = new RelativeLayout(this);
        LayoutParams mainDimensions = new LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        main.setLayoutParams(mainDimensions);

        userNameValue = new EditText(this);
        passwordValue = new EditText(this);
        message = new TextView(this); 
        userName = new TextView(this);
        password = new TextView(this);
        login = new Button(this);

    }

    private void createMessageTextView() {
        LayoutParams messageDimensions = new LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        messageDimensions.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        message.setText("Please Login First");
        message.setLayoutParams(messageDimensions);
    }
}

这里:

    main.addView(message, messageDimensions);

messageDimensionsnull 因为在 createMessageTextView() 方法中创建名称为 messageDimensionsLayoutParams 的新对象而不是使用 messageDimensions 对象在 class 级别声明。

所以,使用:

  messageDimensions = new LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            messageDimensions.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

createMessageTextView() 方法中。