当我尝试设置 EditText 的边距时得到 "cannot find symbol method setMargins(int, int, int, int)"

I'm getting "cannot find symbol method setMargins(int, int, int, int)" when I try to set the Margins of EditText

我正在尝试使用 setMargins() 设置多个 EditText 小部件的边距,但我得到:

Error: cannot find symbol method 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);
    }

如果我只是忘记边距,一切都很好,但如果我能设置它们会更好。

您应该在 LayoutParams 实例中而不是在视图中调用方法 setMargins

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

当您在 XML 中设置边距时,它看起来像这样:

android:layout_margin="16dp"

任何以 layout_ 为前缀的属性实际上都是该视图的 LayoutParams 对象的属性。这是有道理的:LayoutParams 的工作是与父视图就子视图的布局方式进行沟通,而边距是该过程的一部分。

setMargins() 方法是 ViewGroup.MarginLayoutParams class 的一部分。大多数标准 ViewGroups 使用这个(比如 LinearLayout.LayoutParams,等等)。所以你可以这样做:

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

确保在完成边距设置后调用 setLayoutParams(),否则您的更新将不会生效。

根本原因:您设置边距的代码不正确。

解决方法:更改代码

来自

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