我在我的活动中动态添加控件。同时我正在添加一个编辑框和按钮,但在图像对齐方面面临一些问题。
这是我的代码,它将editText和Button广告并返回到线性布局,该布局是垂直对齐的。
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(0);
final EditText textView = new EditText(this);
textView.setLayoutParams(lparams);
textView.setSingleLine(true);
final LayoutParams lparams1 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
final Button button = new Button(this);
textView.setLayoutParams(lparams1);
if(id == R.id.new_alternate_number_button)
{
if(contactNumber == "")
{
textView.setHint("Enter contact Number");
}
else
{
textView.setText(contactNumber);
}
textView.setInputType(InputType.TYPE_CLASS_PHONE); //to popup numpad
}
else
{
if(contactEmailID == "")
{
textView.setHint("Enter Email ID ");
}
else
{
textView.setText(contactEmailID);
}
}
button.setBackgroundResource(R.drawable.ic_delete);
button.setBackgroundResource(R.drawable.ic_delete);
button.setOnClickListener(deleteView);
layout.addView(textView);
layout.addView(button);
textView.post(new Runnable() {
public void run() {
textView.requestFocus();
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(textView, InputMethodManager.SHOW_IMPLICIT);
}
});
return layout;
在我的XML文件中,我声明线性布局是垂直对齐的,即图标应该在屏幕的末尾,EditText应该左对齐..我还需要EditText和图像之间的空格..
提前致谢
答案 0 :(得分:1)
您的LayoutParams设置为WAP而不是FILL_PARENT(或MATCH_PARENT)的WRAP_CONTENT。
我在类似情况下使用的“模式”是即使我动态添加新的行/节,我仍然将它们布局在该行的xml文件中,然后我动态膨胀并找到元素通过id,绑定到它们。类似于我们处理列表项的方式,除了在这种情况下,您没有使用列表。
通过将布局保留在XML文件中,可以更容易地构建您想要查看的内容,添加填充等。如果无法使LinearLayout工作,您甚至可以使用RelativeLayout。同样,您可以在代码中完成所有这些操作,但在XML中进行布局可以提供更大的灵活性(并且在我的脑海中更容易处理)
答案 1 :(得分:1)
这是如何在Button和EditText之间添加空间的:
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams
(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(50, 0, 0, 0); // Adding margin to the left of your button
Button yourButton = new Button(this);
yourButton.setText("some text");
linearLayout.addView(yourButton, layoutParams);
setMargins方法中的参数序列:
android:layout_marginLeft
android:layout_marginTop
android:layout_marginRight
android:layout_marginBottom
答案 2 :(得分:1)
现在我正确地认识到你的要求(至少我猜是这样)我还有另一个答案。让我了解它的帮助。
您必须为元素指定权重。假设您的布局的总weightSum是8,那么如果您将EditText的权重指定为7,则它将占总空间的7/8。并将按钮设置为1,因此需要1/8的空间。我只使用8作为示例,您可以将其更改为您想要的任何数字,做一些试验和错误,看看哪种重量最适合您的需求。
此外,权重是浮动的,所以不要忘记数字后的“f”,如1f和7f:
(同样,我不在我的开发机器附近,所以可能会有一些错误。但这应该有效。)
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams
(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 7f);
// Last parameter 6f defines weight. So yourEditText will take 7/8th of the space
linearLayout.addView(yourEditText, layoutParams);
layoutParams = new LinearLayout.LayoutParams
(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1f);
// Last parameter 6f defines weight. So yourEditText will take 1/8th of the space
linearLayout.addView(yourButton, layoutParams);
让我们看看这有多大帮助。 :)