当我尝试设置编辑文本的边距时,我遇到了"cannot find symbol method setMargins(int, int, int, int)"



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

错误:找不到符号方法集Marings(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,而不是在 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);
}

在 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(),否则更新不会生效。

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

解决方案:更改代码

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

相关内容

最新更新