2016-05-09 5 views
1

Я пытаюсь получить свою кнопку для создания текстового поля, где пользователь может вводить информацию. Таким образом, они могут создавать только столько строк, сколько захотят. Кроме того, есть ли способ создать сразу несколько полей? Таким образом, это будет в конечном итоге что-то вроде этого:Создайте динамически текстовые поля

«Добавить событие» (остальная часть экрана остается пустым, пока они не нажмут на этой кнопке)

Текстовое поле 1/Текстовое поле 2/Текст поля 3

(когда они нажимают эту кнопку и, конечно, без подчеркиваний, просто пример)

Таким образом, они могут положить в информации, которую они хотят есть. Если они хотят другую строку, они снова нажимают кнопку добавления.

Должен ли я использовать onClickListener? Я смущен относительно того, как я хотел бы создать кнопку для создания этого поля для пользователя.

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

     } 
    }); 
} 

}

Это то, что я до сих пор. Я застрял на нем в жаркую минуту. Я знаю, что я еще не использовал «inputField».

+0

Попробуйте использовать onClickListener; если он не делает то, что вы ожидаете, разместите свой код, объясните, что он делает и что вы ожидаете от него. Stack Overflow работает лучше всего с такими конкретными вопросами. –

+0

Посмотрите на RecyclerViews – zafrani

ответ

1

Предположим, у вас есть следующий макет XML:

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

    </LinearLayout> 
</LinearLayout> 

в кнопке onClickListener вы можете иметь что-то вроде:

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

Вы можете изменить LayoutParams, чтобы получить макет вам нравится.

Если вы хотите несколько EditText в одной строке, вы можете сделать следующее:

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

Я знаю, что это очень поздний ответ, но разве это не работает для относительной компоновки? потому что я пробовал это, и я просто получаю кучу ошибок в среде IDE. Все, что я сделал, это заменить все «LinearLayout» на «RelativeLayout». – AbhorDeities

+0

Обязательно избегайте атрибутов компоновки, таких как «ориентация», которые относятся к LinearLayout и не используются в RelativeLayout. Всякий раз, когда вы переключаетесь с LinearLayout на RelativeLayout, вам нужно также установить положение своего ребенка относительно друг друга. –

Смежные вопросы