RelativeLayout - Nur letztes item wird angezeigt ?

  • 3 Antworten
  • Letztes Antwortdatum
Y

yolonaut

Neues Mitglied
0
Hallo zusammen,

ich habe ein RelativeLayout mit zwei Buttons von denen immer nur der letzte angezeigt wird. Auch wenn ich 3 oder 4 Buttons einfüge wird immer nur der letzte Button im Layout sichtbar. In der Vorschau sind jedoch alle sichtbar, nur auf dem Device ist das der Fall.
Der Auslöser ist, dass ich versuche, im Code die Größe der Buttons zu verändern. Darauf kann ich jedoch nicht verzichten. Hier mein Code:

Code:
 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="//schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >


<LinearLayout
    android:id="@+id/layoutOverlay"
    android:layout_width="500dp"
    android:layout_height="300dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true" />
    </RelativeLayout>
</LinearLayout>

</RelativeLayout>
Code:
public class MainActivity extends Activity {
    Button btn_1;
    Button btn_2;



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

    setContentView(R.layout.activity_main);


    btn_1 = (Button) findViewById(R.id.button1);
    btn_2 = (Button) findViewById(R.id.button2);

    btn_1
            .setLayoutParams(new     android.widget.RelativeLayout.LayoutParams(
                    150, 150));
    btn_2
            .setLayoutParams(new        android.widget.RelativeLayout.LayoutParams(
                    150, 150));

}

}
Danke schonmal !
 
Der Fehler liegt im Befehl

Code:
btn_1.setLayoutParams(
new android.widget.RelativeLayout.LayoutParams(150, 150));
Statt die Höhe und Breite im alten Layout zu ändern, wird ein komplett neues Parameter-Objekt erzeugt, welches das alte Objekt ersetzt. Alle Werte außer Höhe und Breite sind jetzt weg.
Jetzt werden alle Button an der gleichen Stelle gezeichnet.
Außerdem ist das erzeugte Objekt vom falschen Typ - RelativeLayout.LayoutParams statt ViewGroup.LayoutParams.

Besser:
Code:
ViewGroup.LayoutParams parms_1 = bnt_1.getLayoutParams();

parms.height =150;
parms.width=150;

bnt_1.setLayoutParms(parms_1);
 
Wenn man es genau nimmt, hat man mit einem LinearLayout die meisten Möglichkeiten, auch wenn es durch dieses verschachteln sehr unübersichtlich wird.

Der Vorteil liegt aber klar auf der Hand, man kann jedes Layout für jede Größe nutzen.
Werde bei Gelegenheit mal ein Tutorial schreiben, da ich diese Problematik nun richtig gut lösen konnte ;)

Kurz gesagt, man arbeitet mit android:weightSum und android:layout_weight, statt mit direkten Größen. Ist das Eltern-Layout ein vertical, muss height auf 0dip, bei horizontal die width auf 0dip. Wenn man den Dreh raus hat, ganz easy^^
 
Ganz deiner Meinung, man ist einfacher unabhängiger in der Gestaltung. Und der Einsatz eines LayoutInflater erlaubt eine sehr freie Gestaltung. Insbesondere bei Listen.
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben Unten