Android Layout-Probleme: View programmatisch erweitern (addContentView)

tfa

Top Contributor
Ich versuche mich gerade an Android-Layouts. Ein normales LinearLayout (R.layout.main) soll programmatisch um eine beliebige Anzahl Views erweitert werden.
Das Main-Layout besteht nur aus einem Textview mit dem Inhalt "Überschrift":

[XML]<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android😱rientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android😛adding="8dip"
>
<TextView
style="@style/main_title"
android:text="@string/main_title"
/>
</LinearLayout>
[/XML]

Im Java-Code erzeuge ich zwei Buttons und möchte diese in die Content-View der Main-Activity einfügen:
Java:
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button button1 = new Button(this);
        Button button2 = new Button(this);
        button1.setText("Huhu1");        
        button2.setText("Huhu2");
        
        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.HORIZONTAL);
        ll.addView(button1);
        ll.addView(button2);
        
        LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
        addContentView(ll, params );
    }
}
Das funktioniert auch, nur hängen die Knöpfe ganz oben im Layout und verdecken die Überschrift (s.u.).
Irgendwie müsste man hier mit RelativeLayout arbeiten und einen Bezug zum Main-Layout angeben. Aber wie funktioniert das? Oder gibt es eine andere Möglichkeit das Problem zu lösen?

android_layout.png
 
Hallo also habe ich das richtig verstandne du willst zu dem vorhandenen Layout mit den zwei Buttons und der Ueberschrift noch mehrere TextViews oder andere Steuerelemente hinzufuegen. Jedoch setzen die sich momentan dann ueber die Ueberschrift?

Du willst Sie unter die Buttons also sprich in eine neue Zeile platzieren.
 
Das statische, in der XML-Datei definierte Layout beinhaltet nur die Überschrift. Die beiden Knöpfe werden im Java-Code angelegt und sollen unter der Überschrift erscheinen. Mehr will ich erstmal nicht.
 
Also, ich bin mir nicht sicher in wie weit man zwei Layouts, welche beide "FILL_PARENT" benutzen gleichzeitig anzeigen lassen kann. Möglich, dass das der Grund ist, warum beide "oben links" platziert werden.

Wenn du aber nicht unbedingt zwei Layouts benutzen musst, könntest du versuchen, die Buttons auf das bereits vorhandene Layout zu platzieren, ohne ein weiteres Layout Objekt zu erzeugen.

Ein Versuch wäre folgendes:
Java:
//Damit sollte man an das bereits vorhandene Layout Objekt rankommen
LinearLayout layout = (LinearLayout) View.inflate(this, R.layout.main, null);

Was passiert, wenn du das anstelle deiner Zeile 19,20 machst? Ich hätte jetzt gesagt, dass du dann mittels
Java:
layout.addView(button1);
deinen neuen Button zur geladenen R.layout.main hinzufügen würdest. Kann ich im Moment aber nicht testen. Ist nur geraten.
 
Ist klar warum, du hast in der XML Datei ein LinearLayout fuer das ganze Frame. In diesem LinearLayout hast du die Uberschrift drinnen. Was dein Fehler ist, du tust zwar in der Java Klasse ein neues LinearLayout fuer die Buttons erzeugen, aber du hast vergesen dieses Layout dem grossen LinearLayout des Frame hinzuzufuegen. Dh. du setzt momentan dein selbsterzeugstes Layout auf das Frame Layout deswegen das Verhalten.
 
[Java]
package com.android.test;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

public class s extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Button button1 = new Button(this);
Button button2 = new Button(this);
button1.setText("Huhu1");
button2.setText("Huhu2");

LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout1);

LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);

LayoutParams params2 = new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);

LinearLayout l = new LinearLayout(this);
l.setOrientation(LinearLayout.HORIZONTAL);


layout.addView(l, params2);
l.addView(button2, params);
l.addView(button1, params);
}
}[/Java]

[Java]
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android😱rientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:id="@+id/linearLayout1">

<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="ASdad"/>

</LinearLayout>[/Java]
 

Neue Themen


Zurück
Oben