我正在尝试使用 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);
}