mit button click dynamisch ein relativlayout erstellen

  • Hallo zusammen,

    Ich habe in der XML datei meiner APP schin mehrere relativLayouts. dazwischen ist ein Button, und wenn dieser angeklickt wird, dann soll ein zusätzliches Relativlayout mit textViews erstellt werden.
    Also die XML datei sieht wie folgt aus (XML Datei ist zu lang daher dieses Beispiel):

    <scrollView
    <RelativeLayout1
    <RelativeLayout2
    <RelativeLayout3
    <ImageButton/>
    </scrollView
    </RelativeLayout1
    </RelativeLayout2
    </RelativeLayout3

    nach dem ImgaeButton click soll dann so aussehen:


    <scrollView
    <RelativeLayout1
    <RelativeLayout2
    <RelativeLayout3
    <RelativeLayout4
    <ImageButton/>
    <ImageButton2/>
    </RelativeLayout4
    </RelativeLayout3
    </RelativeLayout2
    </RelativeLayout1
    </scrollView


    kann mir einer sagen wie ich das bewältigen kann?

    Danke

  • Hallo mit XML ist so ein dynamisches layout nicht möglich. Das neue layout4 müsstest du dann im Java Code erstellen.
    Wass auch möglich ist eine neue xmlLauout Datei neu zu inflaten.

    Berichte erstmal was du da machen willst.

  • Ich will ja mit java code das neue layout erstellen.

    Ich weiss aber nicht so ganz wie ich das machen soll, so dass das neue Layout zwischen zwei anderen layouts plaziert werden kann.

  • Hallo ich denke in etwa so.

  • Hi danke erst mal, ich bin jetzt soweit, dass ich layouts ausgeben kann, hab jedoch folgendes Problem.
    Ich erstele zwei neuen RelativeLayout objecte. will das eine unterhalb dem anderen plazieren. das klappt aber nicht so ganz. Mein Code ist:


    Wo genau ist mein fehler?

  • Hi,
    Was verstehst Du unter "das klappt nicht so ganz" ????
    Kommt ne Fehlermeldung ? Geht es gar nicht ? Stürzt die App ab ? Wie sieht das Ergebnis aus ?

    Gruß Carsten

    Humor ist....wenn man trotzdem lacht :saint:

  • Das erste Layout "relLayoutFlightLine2" wird richtig plaziert genauso wie es sein muss.
    Aber das zweite layout "relLayoutFlight3" wird ganz oben in dem relLayoutFlights plaziert. es sieht so aus als ob in dem Moment, in dem ich das tue:
    paramsLayoutFlight3.addRule(RelativeLayout.BELOW, relLayoutFlightLine2.getId());
    gibt es kein relLayoutFlightLine2. ich hab mir die Id davon ausgegeben, die ist -1.


    Also "relLayoutFlight3" wird falsch positioniert.

  • wie du in dem Code sehe kannst ich hol zwei layouts aus dem XMl datei:

    RelativeLayout relLayoutFlights = (RelativeLayout)findViewById(R.id.relLayoutMultiCityFlights);

    RelativeLayout relLayoutFlight2 = (RelativeLayout)findViewById(R.id.relLayoutFlight2)


    Code
    <RelativeLayout
                    android:id="@+id/relLayoutMultiCityFlights"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_below="@+id/relLayoutMultiCityLine0">
                    <RelativeLayout
                        android:id="@+id/relLayoutFlight2"
                        android:layout_width="360dp"
                        android:layout_height="80dp"
                        android:layout_centerHorizontal="true">


    Das problem muss hier liegen:
    paramsLayoutFlight3.addRule(RelativeLayout.BELOW, relLayoutFlightLine2.getId());

  • Hi,

    Poste doch mal bitte die Datei vollständig. Ich sehe nur die ID relLayoutFlight2.....
    Um diese Layout zu verstehen bräuchte ich aber die Ganze Datei.

    Gruß Carsten

    Humor ist....wenn man trotzdem lacht :saint:

  • wie ich vermutete "relLayoutFlightLine2" hat in dem moment keine ID.

    so wird das gelöst:
    RelativeLayout relLayoutFlightLine2 = new RelativeLayout(this);
    relLayoutFlightLine2.setId(View.generateViewId());damit hat dieses Layout eine Id und man kann das benutzen:paramsLayoutFlight3.addRule(RelativeLayout.BELOW, relLayoutFlightLine2.getId());

  • Ok ... wieder was gelernt. Ich hatte da eine andere Vermutung ;)
    Aber wenn es denn jetzt gelöst ist, um so besser. Und danke, das du geschrieben hast, wie Du es gelöst hast.

    Gruß Carsten

    Humor ist....wenn man trotzdem lacht :saint:

  • Kein Ding.

    jetzt hab ich folgendes Problem:

    ich will eine Text size für meine TextView besimmen.

    ich mach das wie folgt:

    Code
    int tvFlight3HeightPixels = (int)(20*scale + 0.5f);
            int tvFlight3TopMargin = (int)(3*scale + 0.5f);
            RelativeLayout.LayoutParams paramsLayoutFlight3Tv = new RelativeLayout.LayoutParams(dateWidthPixels, tvFlight3HeightPixels);
            paramsLayoutFlight3Tv.topMargin = tvFlight3TopMargin;
            TextView tvFlight3 = new TextView(this);
            tvFlight3.setId(View.generateViewId());
            tvFlight3.setGravity(Gravity.CENTER);
            tvFlight3.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.flights_textSize));
            tvFlight3.setText(getResources().getString(R.string.flight3));
            tvFlight3.setTextColor(getResources().getColor(R.color.colorBackgroundFlightBar));

    und dimens datei:

    Code: dimens.xml
    <resources>
    
    
    
    
        <dimen name="fab_margin">16dp</dimen>
        <dimen name="flights_textSize">10sp</dimen>
    </resources>

    das Problem ist, dass die size sich nicht ändert.
    egal wasich da eingebe :(

  • 10sp hat sie ja.
    Und die Methode vFlight3.setTextSize( 20f ); verlangt einen float wert deshalb das f . Ich wollte wissen ob die Ressourcenauflösung richtig funktioniert. Wenn sich die Schriftgröße bei direkter Eingabe ändert stimmt zu mindestens der Rest denn wir nicht sehen können.

  • denke
    COMPLEX_UNIT_SP und nicht
    COMPLEX_UNIT_PX

    Ist besser.

    Ps.
    Wenn ich jetzt so darüber nachdenke bin ich mir nicht sicher ob das mit dem 10sp in der dimens Datei richtig ist teste auch mal nur 10 ohne das sp .

    2 Mal editiert, zuletzt von nono124 (15. August 2017 um 20:39)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!