当我尝试设置 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 的一部分。大多数标准 ViewGroup
s 使用这个(比如 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);
}
我正在尝试使用 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 的一部分。大多数标准 ViewGroup
s 使用这个(比如 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);
}