2014-10-22 2 views
0

상대 레이아웃을위한 요소를 프로그래밍 방식으로 생성합니다. 매번 다른 수의 요소를 제공합니다. TextView 및 EditText 요소를 겹치지 않고 올바르게 표시 할 수 있지만 두 번째 확인란을 선택하면 모든 것이 엉망이되었습니다. 이것은 내 코드입니다 :동적으로 생성 된 안드로이드 레이아웃에서 겹치는 요소

RelativeLayout mRlayout = (RelativeLayout) findViewById(R.id.checkFieldsLayout); 

for (int i = 1; i < fields.size(); i++) { 
    RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.MATCH_PARENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT); 
     params1.addRule(RelativeLayout.BELOW,fields.size()+i -1); 

    RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.MATCH_PARENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT); 
    params2.addRule(RelativeLayout.BELOW, i); 

    String thisHeader = fields.get(i).replace("_", " ").toString(); 

    if (thisHeader.contains("chkbox")) { 
     CheckBox chkbox = new CheckBox(this); 
     chkbox.setId(i); 
     chkbox.setText(thisHeader); 
     chkbox.setLayoutParams(params1); 
     mRlayout.addView(chkbox); 

     if (thisHeader.contains("chkboximg")) { 
      Button upload_btn = new Button(this); 
      upload_btn.setId(i); 
      upload_btn.setLayoutParams(params1); 
      upload_btn.setText("Select Image"); 
      upload_btn.setOnClickListener(this); 
      mRlayout.addView(upload_btn); 
     } 

    } else { 
     TextView header = new TextView(this); 
     header.setText(StringUtils.capitalize(thisHeader)); 
     header.setId(i); 
     header.setLayoutParams(params1); 

     EditText field = new EditText(this); 
     field.setLayoutParams(params2); 
     field.setId(fields.size() + i); 

     mRlayout.addView(header); 
     mRlayout.addView(field); 
    } 
} 

각 요소가 이전 요소 아래에 나타나도록 레이아웃 매개 변수를 올바르게 설정하는 방법을 알아낼 수 있습니까?

답변

0

XML로 추가 할보기를 정의하고 코드의 레이아웃 매개 변수를 사용하는 대신 여기에서 펼치면됩니다. 가시성을 Visible 또는 Gone으로 설정하여 파트를 켜고 끌 수 있습니다.

+0

복잡하지 않을 수 있습니다. 레이아웃 규칙이 두 가지 빠져 있다고 확신합니다. –