Android - 如何以编程方式将View添加到Activity的Absolute Layout设置其位置?

时间:2010-10-07 22:10:17

标签: android

我有一个包含多个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();

2 个答案:

答案 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无法全部使用。