如何自定义动态的程序化布局 - Android

时间:2010-12-01 06:16:07

标签: android xml android-layout dynamic

我正在处理一些示例代码,我用它来创建一个从服务器中提取Surveys的应用程序。布局渲染是在java而不是XML中完成的,我遇到的问题是标签和文本编辑框(分别用于问题和答案)在同一条线上相互挤压而不是在另一条线上彼此叠加在XML中呈现的默认行。

我希望将标签放在文本编辑框上方,这样两者都可以在整个屏幕上伸展并且更好看。

这里的整体布局代码:

    private boolean DisplayForm()
{

    try
    {
        ScrollView sv = new ScrollView(this);
        //need TableLayout Here!
        final LinearLayout ll = new LinearLayout(this);
        sv.addView(ll);
        ll.setOrientation(android.widget.LinearLayout.VERTICAL);
        ll.setBackgroundResource(R.color.background);


        int i;
        for (i=0;i<theForm.fields.size();i++) {
            if (theForm.fields.elementAt(i).getType().equals("text")) {
                theForm.fields.elementAt(i).obj = new EditSurvey(this,(theForm.fields.elementAt(i).isRequired() ? "*" : "") + theForm.fields.elementAt(i).getLabel(),"");
                ll.addView((View) theForm.fields.elementAt(i).obj);
            }
            if (theForm.fields.elementAt(i).getType().equals("numeric")) {
                theForm.fields.elementAt(i).obj = new EditSurvey(this,(theForm.fields.elementAt(i).isRequired() ? "*" : "") + theForm.fields.elementAt(i).getLabel(),"");
                ((EditSurvey)theForm.fields.elementAt(i).obj).makeNumeric();
                ll.addView((View) theForm.fields.elementAt(i).obj);
            }
            if (theForm.fields.elementAt(i).getType().equals("choice")) {
                theForm.fields.elementAt(i).obj = new SurveySpinners(this,(theForm.fields.elementAt(i).isRequired() ? "*" : "") + theForm.fields.elementAt(i).getLabel(),theForm.fields.elementAt(i).getOptions());
                ll.addView((View) theForm.fields.elementAt(i).obj);
            }
        }

用于提取标签和文本编辑框的代码在此处:

public class EditSurvey extends LinearLayout {
TextView label;
EditText txtBox;

public EditSurvey(Context context,String labelText,String initialText) {
    super(context);
    label = new TextView(context);
    label.setText(labelText);
    label.setTextColor(0xFF000000);
    //label.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT));
    txtBox = new EditText(context);
    txtBox.setText(initialText);
    //txtBox.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT));
    this.addView(label);
    this.addView(txtBox);
}

我遗漏了另一个用旋转器拉入标签的代码片段,这几乎是一样的。

这不是我的代码,只是为了清楚(这是Frank Abelson的),但我试图将它与我的目的纠缠在一起。

任何帮助都会很棒。

0 个答案:

没有答案