2011-08-25 6 views
19

몇 줄에 하나씩 단추 목록을 만드는 방법은 무엇입니까? 나는이 만든 : 버튼을 프로그래밍 방식으로 여러 줄에 하나씩 레이아웃에 추가하는 방법은 무엇입니까?

LinearLayout layout = (LinearLayout) findViewById(R.id.linear_layout_tags); 
    for (int i = 1; i < 10; i++) { 
     Button btnTag = new Button(this); 
     btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     btnTag.setText("Button " + i); 
     btnTag.setId(i); 
     layout.addView(btnTag); 
     ((Button) findViewById(i)).setOnClickListener(this); 
    } 

을 하나 개의 행만 가지고 :

I got this
는 프로그래밍 방식으로 다음 라인으로 이동을?

+0

내 첫 번째 아이디어는 ListView에 대한 사용자 지정 SimpleCursorAdapter에서 getView()를 변경하는 것이지만 버튼을 프로그래밍 방식으로 작성하는 것이 더 간단 할 수도 있습니다. 그래서 나는 여기서 물어 본다. 누군가이 질문을 결정했을지 모릅니다. – Sviatoslav

+0

답변을 드릴 수는 있지만 질문은 닫힙니다./ –

+1

@ B. 영 : 재개되었습니다. –

답변

37

문제는 버튼이 자동으로 화면의 다음 부분으로 넘어 가지 않는다는 것입니다. 뷰를 배치하는 방법을 Android에 구체적으로 알려줘야합니다. LinearLayout 또는 RelativeLayout과 같은 ViewGroups를 사용하여이 작업을 수행합니다.

LinearLayout layout = (LinearLayout) findViewById(R.id.linear_layout_tags); 
layout.setOrientation(LinearLayout.VERTICAL); //Can also be done in xml by android:orientation="vertical" 

for (int i = 0; i < 3; i++) { 
    LinearLayout row = new LinearLayout(this); 
    row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 

    for (int j = 0; j < 4; j++ { 
     Button btnTag = new Button(this); 
     btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     btnTag.setText("Button " + (j + 1 + (i * 4)); 
     btnTag.setId(j + 1 + (i * 4)); 
     row.addView(btnTag); 
    } 

    layout.addView(row); 
} 

나는 R.id.linear_layout_tags이 활동에 대한 XML의 부모의 LinearLayout이라고 가정하고있다.

여기 네가하는 일은 네 개의 버튼을 누르고있는 행이 될 LinearLayout을 만드는 것입니다. 그런 다음 버튼이 추가되고 각 ID에 점진적으로 번호가 지정됩니다. 모든 단추가 추가되면 행이 활동 레이아웃에 추가됩니다. 그런 다음 반복됩니다. 이것은 약간의 의사 코드 일 뿐이지 만 아마도 작동 할 것입니다.

아, 그리고 다음 번에 귀하의 질문에 더 많은 시간을 할애해야 ...

https://stackoverflow.com/questions/how-to-ask

+1

이 코드는 3 개의 버튼이 항상 한 행에 배치되어 있다는 것을 알고있을 때 유용합니다. 그러나 단추의 텍스트를 '커서'(데이터베이스)에서 가져온 경우 어떻게해야합니까? 버튼의 너비는 너무 커서 두 개의 버튼 만 연속으로 맞출 수 있습니다. 따라서 세 번째 버튼은 다음 행에 있어야합니다. 버튼을 클릭하면 일부 버튼을 어떻게 삭제할 수 있습니까? 사용자 정의'SimpleCursorAdapter'에서'getView()'를 변경해야 할 수도 있습니다. 나는 이런 식으로 원한다 : [link] (http://min.us/mrqgNnw5P) – Sviatoslav

+0

예를 들어 주셔서 감사합니다! LayoutParams.FILL_PARENT를 LayoutParams.MATCH_PARENT – Dax

8

이 1 대답 유사하지만 XML 파일을 만들 필요없이.

public class mainActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     LinearLayout layout = new LinearLayout(this); 
     layout.setOrientation(LinearLayout.VERTICAL); //Can also be done in xml by android:orientation="vertical" 

     for (int i = 0; i < 3; i++) { 
      LinearLayout row = new LinearLayout(this); 
      row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 

      for (int j = 0; j < 4; j++) { 
       Button btnTag = new Button(this); 
       btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
       btnTag.setText("Button " + (j + 1 + (i * 4))); 
       btnTag.setId(j + 1 + (i * 4)); 
       row.addView(btnTag); 
      } 

      layout.addView(row); 
     } 
     setContentView(layout); 
     //setContentView(R.layout.main); 
    } 
} 
+0

으로 변경하는 것이 좋습니다. 누군가 프로그래밍 방식으로 이해할 수 있다는 점을 알아 주셔서 감사합니다. –

+0

대단히 감사합니다! setContentView (레이아웃) +1 – Benny

0

UI에 배치 할보기 수가 런타임 중에 설정된다는 문제가있었습니다. 그래서 나는 하나의 행에 단지 4 개의 뷰를 원하고 그에 따라 위의 코드를 적용하기로 결정했습니다. 마지막 행의 전망도 위의 행의 전망과 동일한 폭이되도록 또한, 나는 항상 보이지 않는 편집 텍스트와 마지막 행을 가득 : 이것은 도움이 될 것입니다

 // 1.0f is the weight! 
     LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f); 
     layoutParams.setMarginEnd(10); 

     for (int i = 0; i < Math.ceil(discipline.getSeries_count()/4.0); i++) { 
      LinearLayout layoutRow = new LinearLayout(MyActivity.this); 
      layoutRow.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 

      // add only four edit texts to row and move to next line afterwards 
      for (int j = 0; j < 4; j++) { 
       etSeries = new EditText(MyActivity.this); 
       etSeries.setInputType(InputType.TYPE_CLASS_NUMBER); 
       int iIndex = (j + 1 + (i * 4)); 
       etSeries.setText(getResources().getString(R.string.series) + " " + iIndex); 
       etSeries.setId(iIndex); 
       etSeries.setId(i); 
       etSeries.setSelectAllOnFocus(true); 
       etSeries.setLayoutParams(layoutParams); 
       etSeries.setVisibility(iIndex > discipline.getSeries_count() ? View.INVISIBLE : View.VISIBLE); 
       layoutRow.addView(etSeries); 
      } 
      layoutSeries.addView(layoutRow); 
     } 
1

private void addingParticipantinFrame() { 
     TableRow row; 
     final int screenWidth = dpToPx(getResources().getConfiguration().screenWidthDp); 
     add_button_particiapants.setVisibility(View.VISIBLE); 
     if (arrrItemSelcted != null && arrrItemSelcted.size() > 0) { 

      arrrItemSelcted.remove(0); 
      int i = 0; 
      int j = 0; 
      int width = (screenWidth - (arrrItemSelcted.size())*4)/arrrItemSelcted.size(); 

      while (i<arrrItemSelcted.size()) { 
       j = i + 4; 
       row = new TableRow(mParentActivity); 
       TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT); 
       row.setLayoutParams(lp); 
       row.setWeightSum(4); 
       while ((i<j)&&(i<arrrItemSelcted.size())) { 
        Button iBtn = new Button(mParentActivity); 
        iBtn.setGravity(Gravity.CENTER_HORIZONTAL); 
        iBtn.setMinimumWidth(100);//I set 100px for minimunWidth. 
        iBtn.setWidth(width); 
        iBtn.setText(Integer.toString(i + 1)); 
        iBtn.setId(i + 1); 
        row.addView(iBtn, 4 + i - j); 
        i++; 
       } 
       add_button_particiapants.addView(row); 
      } 



      } 
     } 
관련 문제