Configurando RelativeLayout en código java

Me está costando que aparezcan dos vistas de texto una encima de la otra en mi código Java. Aquí está el código con el que estoy experimentando:

/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        layout = new RelativeLayout(this);
        text1 = new TextView(this);
        text1.setText("1");
        text2 = new TextView(this);
        text2.setText("2");

        RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
        RelativeLayout.LayoutParams q = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);

        q.addRule(RelativeLayout.BELOW, layout.getId());
        text1.setLayoutParams(q);
        layout.addView(text1);


        p.addRule(RelativeLayout.BELOW,text1.getId());
        text2.setLayoutParams(p);
        layout.addView(text2);

        setContentView(layout);
    }

Esto apila las dos vistas de texto en la misma línea, pero quiero que TextView text2 aparezca debajo de TextView text1, por lo que en mi aplicación quiero que aparezca lo siguiente como salida:

1
2

He intentado todo tipo de cosas con el método "addRule", no estoy seguro de por qué esto no funciona. Quiero saber cómo hacer esto sin XML porque planeo construir una biblioteca de métodos que puedan construir un diseño que sea fácilmente ajustable mediante la edición de una matriz.