我有一个包含多个Views的表单,最后一个是一个Spinner,它绑定到一个适配器,通过POST请求从Web服务器获取它的数据,最后我为“Other”添加了一个额外的条目。 ..“。如果在微调器上选择了这个选项,在用户输入自定义值的底部有一个新的EditText View,我设法让EditText View显示在屏幕上,但是它位于最顶层,而不是我的其他视图和我似乎无法找到让它出现在Spinner底部的方式,就像我想要的那样,这是我到目前为止的代码:
EditText suggestCarrierField = new EditText(getBaseContext());
suggestCarrierField.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
suggestCarrierField.setHint("Suggest your carrier");
((AbsoluteLayout) findViewById(R.id.createAccountView)).addView(suggestCarrierField);
((AbsoluteLayout) findViewById(R.id.createAccountView)).invalidate();
答案 0 :(得分:0)
为LayoutParams
设置suggestCarrierField
时,请勿使用ViewGroup
,而应使用AbsoluteLayout.LayoutParams
。它有一个构造函数,它采用高度,宽度和x和y坐标。请参阅AbsoluteLayout.LayoutParams doc。这是一个快速的应用程序我鞭打了这个演示:
public class AbsoluteLayoutTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AbsoluteLayout as = new AbsoluteLayout(this);
TextView tvTop = new TextView(this);
tvTop.setText("top");
tvTop.setLayoutParams(new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.FILL_PARENT, AbsoluteLayout.LayoutParams.WRAP_CONTENT, 0, 0));
TextView tvMid = new TextView(this);
tvMid.setText("middle");
tvMid.setLayoutParams(new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.FILL_PARENT, AbsoluteLayout.LayoutParams.WRAP_CONTENT, 0, 80));
TextView tvBot = new TextView(this);
tvBot.setText("bottom");
tvBot.setLayoutParams(new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.FILL_PARENT, AbsoluteLayout.LayoutParams.WRAP_CONTENT, 0, 180));
as.addView(tvTop);
as.addView(tvMid);
as.addView(tvBot);
setContentView(as);
}
}
这将产生三个文本视图。一个在顶部(y-coord = 0),一个在中间(y-coord = 80),一个在底部(y-coord = 180)。
答案 1 :(得分:0)
使用AbsoluteLayout,您需要使用AbsoluteLayout.LayoutParams,而不是ViewGroup.LayoutParams。
int width = 100, height = 25, x = 0, y = 200;
AbsoluteLayout.LayoutParams lp = new AbsoluteLayout.LayoutParams(width, height, x, y);
suggestCarrierField.setLayoutParams(lp);
话虽如此,我强烈建议您考虑使用RelativeLayout(或LinearLayout)来实现它... AbsoluteLayout已被弃用,并且有很好的理由。现在有很多不同尺寸屏幕的不同Android设备,AbsoluteLayout无法全部使用。