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 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?

  • 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());

  • 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());

  • 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.

Jetzt mitmachen!

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