2013-04-08 3 views
0

Я действительно не понимаю, почему этот простой код аварии в этой линии layout.addView(button);Добавление кнопки в линейной компоновке врезается

super.onCreate(savedInstanceState); 
    layout = (LinearLayout)findViewById(R.id.linearLayout); 
    LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 

    Button button = new Button(this); 
    button.setHeight(100); 
    button.setWidth(100); 
    button.setText("HELLO"); 
    button.setLayoutParams(p); 
    layout.addView(button); 

activity_main.xml

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/linearLayout"> 
</LinearLayout> 

EDIT: отредактированный код еще расправляется. Но теперь подавляет в setContentView.

super.onCreate(savedInstanceState); 

    layout = (LinearLayout)findViewById(R.id.linearLayout); 
    setContentView(layout); 
    LayoutParams p = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); 

    int i,j; 
    Button button = new Button(this); 
    button.setHeight(100); 
    button.setWidth(100); 
    button.setText("HELLO"); 
    layout.addView(button,p); 

Logcat отчет enter image description here

+0

вы должны вызвать setContentView ПЕРЕД f indViewById не ПОСЛЕ – Blackbelt

+0

Тогда как я могу дать 'layout' как аргумент в setContentView? Я должен сначала получить его из xml, выполнив findViewById? – Tahlil

+3

Вы не можете просто установить setContentView (R.layout.activity_main)? – Blackbelt

ответ

5

Просто потому, что вы не вызвали setContentView(). Корень View вашего Activity - null, также layout.

+0

Отредактировал мой код. Но все равно раздавит. Спасибо за ответ. – Tahlil

+0

@kalkin, перед вызовом findViewById() вам нужно вызвать setContentView(). – Egor

+0

обычно вызов выглядит как 'setContentView (R.layout.yourLayout)', значение переменной 'layout', вероятно, не является допустимым идентификатором макета – mihail

0

Вы указываете Views ширина высота здесь:

button.setHeight(100); 
button.setWidth(100); 

затем сразу перезаписью:

button.setLayoutParams(p); 

попробовать это, удалите setWidth и setLayoutParams и удалить p:

layout.addView(button, new LayoutParams(100,100)); 
+0

Привет, я отредактировал, как вы упомянули. Но он разбивается в setContentView. Благодарю. – Tahlil

+0

Отредактировал мой ответ, извините, пропустил одну из ваших строк в вопросе – Graeme

+0

... Ах .. «Сокрушает» - вы имеете в виду «Сбои». Я думал, что кнопка раздавлена. :) – Graeme

Смежные вопросы