Я получаю "не могу найти метод символа setMargins (int, int, int, int)", когда я пытаюсь установить поля EditText - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь установить поля нескольких виджетов EditText с помощью setMargins (), но получаю:

Ошибка: не удается найти метод символа setMarings (int, int, int, int).

Есть идеи?Это xml:

<ScrollView
    android:layout_width="384dp"
    android:layout_height="589dp"
    android:layout_marginEnd="16dp"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:layout_marginStart="16dp"
    android:layout_marginTop="24dp"
    android:scrollbarStyle="insideOverlay"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

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

</ScrollView>

И это та часть моего кода:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewGroup;
import android.widget.ScrollView;
import android.view.ViewGroup.MarginLayoutParams;


    LinearLayout linearLayout = LinearLayout)findViewById(R.id.linearLayout);
    //noc is users' input
    for (int i = 1; i<=noc; i++) {

        EditText eText = new EditText(this);
        eText.setId(i);
        eText.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
        //For example:
        eText.setMargins(24,0,24,0);
        linearLayout.addView(eText);
    }

Все работает хорошо, если я просто забываю о полях, но было бы лучше, если бы ямогли бы установить те.

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Когда вы устанавливаете поля в XML, это выглядит следующим образом:

android:layout_margin="16dp"

Любой атрибут с префиксом layout_ фактически будет атрибутом объекта LayoutParams этого представления.Это имеет смысл: работа LayoutParams состоит в том, чтобы общаться с родительским представлением о том, как ребенок хочет быть выложенным, и поля являются частью этого процесса.

Метод setMargins() является частьюViewGroup.MarginLayoutParams класс.Большинство стандартных ViewGroup используют это (например, LinearLayout.LayoutParams и т. Д.).Таким образом, вы можете сделать что-то вроде этого:

MarginLayoutParams params = (MarginLayoutParams) eText.getLayoutParams();
params.setMargin(16, 16, 16, 16);
eText.setLayoutParams(params);

Обязательно позвоните setLayoutParams(), когда вы закончите настройку полей, иначе ваши обновления не вступят в силу.

0 голосов
/ 27 августа 2018

Основная причина: Ваш код для установки полей неверен.

Решение: Измените код

С

LinearLayout linearLayout = LinearLayout)findViewById(R.id.linearLayout);
//noc is users' input
for (int i = 1; i<=noc; i++) {

    EditText eText = new EditText(this);
    eText.setId(i);
    eText.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    //For example:
    eText.setMargins(24,0,24,0);
    linearLayout.addView(eText);
}

К

LinearLayout linearLayout = findViewById(R.id.linearLayout);
//noc is users' input
for (int i = 1; i <= noc; i++) {
    EditText eText = new EditText(this);
    eText.setId(i);
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    layoutParams.setMargins(24, 0, 24, 0);
    eText.setLayoutParams(layoutParams);
    linearLayout.addView(eText);
}
0 голосов
/ 27 августа 2018

Вы должны вызывать метод setMargins в экземпляре LayoutParams, а не в экземпляре View.

LinearLayout linearLayout = LinearLayout)findViewById(R.id.linearLayout);

for (int i = 1; i<=noc; i++) {
    EditText eText = new EditText(this);
    eText.setId(i);

   LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

   params.setMargins(24, 0, 24, 0);
   eText.setLayoutParams(params);
   linearLayout.addView(eText);
}
...