Dynami c EditText не добавляет вышеуказанный элемент в линейный макет - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь добавить динамический c EditText в линейном макете по нажатию кнопки. Моя проблема заключается в том, что всякий раз, когда я нажимаю кнопку, успешно добавляется поле EditText, но под кнопкой «Я хочу показать EditText над кнопкой».

Мой root макет является линейным макетом

Ниже приведен мой код:

Файл макета

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_below="@+id/costLayout"
    android:id="@+id/dynamicLayout">

<com.google.android.material.textfield.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/rulingTypeWrapper"
    android:layout_weight="1">

    <com.google.android.material.textfield.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:hint="Add ruling type"
        android:id="@+id/product_rule_type"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp">

    </com.google.android.material.textfield.TextInputEditText>

</com.google.android.material.textfield.TextInputLayout>>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_weight="1"
        android:id="@+id/addField"
        android:text="ADD"
        android:drawableTop="@android:drawable/ic_input_add"/>

</LinearLayout>

Java код

  protected void createEditTextView() {
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams (
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);

    params.setMargins(16,10,16,10);
    TextInputEditText edittTxt = new TextInputEditText(this);

    int maxLength = 50;
    hint++;
    edittTxt.setHint("Ruling type");
    edittTxt.setLayoutParams(params);
    edittTxt.setInputType(InputType.TYPE_CLASS_TEXT);
    edittTxt.setTextSize(TypedValue.COMPLEX_UNIT_SP,18);
    edittTxt.setId(hint);
    InputFilter[] fArray = new InputFilter[1];
    fArray[0] = new InputFilter.LengthFilter(maxLength);
    edittTxt.setFilters(fArray);
    parentLayout.addView(edittTxt);
}

Кто-то, пожалуйста, дайте мне знать, что я делаю не так. Любая помощь будет принята.

СПАСИБО

Ответы [ 2 ]

1 голос
/ 25 января 2020

Похоже, вы добавляете динамический c текст редактирования на родительский макет, который также состоит из кнопки. Итак, добавьте линейный макет, как показано ниже над кнопкой, и добавьте свои динамические c поля в этот линейный макет. Это должно решить вашу проблему.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_below="@+id/costLayout">

    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/rulingTypeWrapper"
        android:layout_weight="1">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:hint="Add ruling type"
            android:id="@+id/product_rule_type"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp">

        </com.google.android.material.textfield.TextInputEditText>

    </com.google.android.material.textfield.TextInputLayout>

    <!-- moved the dynamic layout id here -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:id="@+id/dynamicLayout" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_weight="1"
        android:id="@+id/addField"
        android:text="ADD"
        android:drawableTop="@android:drawable/ic_input_add"/>

</LinearLayout>
0 голосов
/ 25 января 2020

Вертикальный LinearLayout упорядочит свои дочерние представления сверху вниз в порядке их добавления. Первый добавленный ребенок помещается вверху. Последний ребенок находится внизу. Вы добавили EditText, когда кнопка уже добавлена, поэтому она находится внизу. Вы можете удалить кнопку и добавить ее после того, как EditText уже добавлен.

Более простым решением было бы просто добавить EditText в xml над кнопкой и установить visibility в gone. Затем вы получаете EditText через findViewById и затем вызываете editText.setVisibility(View.VISIBLE). После этого вы также можете установить его параметры макета и другие свойства. Это если намерение состоит в том, чтобы просто добавить один EditText. Если их больше одного, вы можете попытаться сделать то, что предложил @ shr3jn. Если даже больше, то используйте ListView. Если много, еще больше, используйте RecyclerView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...