2016-05-09 26 views
1

Ich versuche, mit meiner Schaltfläche ein Textfeld zu erstellen, in dem der Benutzer Informationen eingeben kann. Auf diese Weise können sie nur so viele Zeilen erstellen, wie sie möchten. Gibt es auch eine Möglichkeit, mehrere Felder gleichzeitig zu erstellen? Also, es ist so etwas wie dies am Ende:Dynamische Textfelder erstellen

„Add Event“ (Rest des Bildschirms ist leer, bis sie auf diese Schaltfläche klicken)

Textfeld 1/Textfeld 2/Textfeld 3

(sobald sie diese Taste drücken und natürlich ohne die Unterstreichungen, nur ein Beispiel)

So können sie in Informationen setzen, dass sie es wollen. Wenn sie eine andere Zeile wünschen, klicken sie erneut auf die Schaltfläche Hinzufügen.

Soll ich einen onClickListener verwenden? Ich bin verwirrt darüber, wie ich gehen würde, um die Schaltfläche zu erstellen, um das Feld für den Benutzer zu erstellen.

public class BudgetScreen extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_budget_screen); 

    Button addBillExpense = (Button) findViewById(R.id.addBillExpense); 

    addBillExpense.setOnClickListener(new Button.OnClickListener() { 
     public void onClick (View v) { 

      TextView inputField = new TextView(BudgetScreen.this); 

     } 
    }); 
} 

}

Das ist, was ich bisher haben. Ich habe mich für eine heiße Minute festgefahren. Mir ist bewusst, dass ich "inputField" noch nicht benutzt habe.

+0

Versuchen Sie, eine OnClickListener verwendet; Wenn es nicht das tut, was Sie erwarten, poste deinen Code, erkläre, was er tut und was du erwartest. Stack Overflow funktioniert am besten mit spezifischen Fragen wie diesem. –

+0

Schauen Sie in RecyclerViews – zafrani

Antwort

1

Angenommen, Sie das folgende Layout xml haben:

<LinearLayout ...> 
    <Button .../> 
    <LinearLayout ... 
    android:id="@+id/holder" 
    android:orientation="vertical"> 

    </LinearLayout> 
</LinearLayout> 

in Taste onClickListener Sie so etwas wie haben:

LinearLayout layout = (LinearLayout) findViewById(R.id.holder); 
EditText et = new EditText(this); 
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT); 
layout.addView(et,lp); 

Sie können die LayoutParams ändern zu bekommen, das Layout Sie möchten.

Wenn Sie mehrere EditText in einer einzigen Reihe möchten, können Sie wie folgt vorgehen:

final int NUM_EDITTEXT_PER_ROW = 3; 
    LinearLayout layout = (LinearLayout) findViewById(R.id.holder); 
    Display display = ((WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int width = display.getWidth()/NUM_EDITTEXT_PER_ROW; 
    LinearLayout tempLayout = new LinearLayout(this); 
    tempLayout.setOrientation(LinearLayout.HORIZONTAL); 
    for(int i=0;i<NUM_EDITTEXT_PER_ROW;i++){ 
     EditText et = new EditText(this); 
     LayoutParams lp = new LayoutParams(width,LayoutParams.WRAP_CONTENT); 
     tempLayout.addView(et,lp); 
    } 
    layout.addView(tempLayout); 
+0

Ich weiß, das ist eine sehr späte Antwort, aber funktioniert das nicht für ein relatives Layout? Weil ich das ausprobiert habe und ich nur ein paar Fehler in der IDE bekomme. Alles, was ich getan habe, war das Ersetzen aller "LinearLayout" durch "RelativeLayout". – AbhorDeities

+0

Achten Sie darauf, Layoutattribute wie "Ausrichtung" zu vermeiden, die für LinearLayout spezifisch sind und nicht in RelativeLayout verwendet werden sollen. Wenn Sie von LinearLayout zu RelativeLayout wechseln, müssen Sie auch die Position des untergeordneten Elements relativ zueinander festlegen. –