2011-08-25 28 views
19

Cách tạo danh sách các nút từng cái một trong một vài dòng? Tôi làm điều này: Làm cách nào để thêm các nút vào bố cục một cách theo chương trình trong một số dòng?

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); 
    } 

và nhận chỉ có một dòng:

I got this
Làm thế nào để đi đến dòng tiếp theo lập trình?

+0

Ý tưởng đầu tiên của tôi là thay đổi getView() trong SimpleCursorAdapter tùy chỉnh cho ListView, nhưng có thể đơn giản hơn là đặt các nút theo lập trình. Vì vậy, tôi hỏi ở đây. Có thể ai đó đã quyết định câu hỏi này. – Sviatoslav

+0

Tôi có thể trả lời câu hỏi này cho bạn nhưng câu hỏi đã bị đóng:/ –

+1

@ B.Young: Đã mở lại. –

Trả lời

37

Vấn đề là các nút của bạn sẽ không tự động quấn vào phần tiếp theo của màn hình. Bạn phải cụ thể cho Android biết cách bạn muốn Vị trí của mình được định vị. Bạn làm điều này bằng cách sử dụng các nhóm như LinearLayout hoặc RelativeLayout.

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); 
} 

Tôi giả định rằng R.id.linear_layout_tags là LinearLayout mẹ của XML cho hoạt động này.

Về cơ bản những gì bạn đang làm ở đây là bạn đang tạo LinearLayout sẽ là một hàng giữ bốn nút của bạn. Sau đó, các nút được thêm vào và mỗi nút được gán một số tăng dần làm id của chúng. Khi tất cả các nút được thêm vào, hàng sẽ được thêm vào bố cục của hoạt động của bạn. Sau đó, nó lặp lại. Đây chỉ là một số mã giả nhưng nó có thể sẽ hoạt động.

Oh và thời gian tiếp theo hãy chắc chắn để dành nhiều thời gian cho câu hỏi của bạn ...

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

+1

Mã này là tốt khi chúng ta biết rằng 3 nút luôn được đặt trong một hàng. Nhưng phải làm gì khi văn bản trong nút được lấy từ 'Con trỏ' (từ cơ sở dữ liệu)? Chiều rộng của nút có thể được như vậy, mà chỉ có hai nút sẽ phù hợp trong một hàng. Vì vậy, nút thứ ba phải đi vào hàng tiếp theo. Và làm cách nào tôi có thể xóa một số nút khi nhấp vào nút đó. Có thể tôi phải thay đổi 'getView()' trong 'SimpleCursorAdapter' tùy chỉnh cho điều này. Tôi muốn smth như thế này: [link] (http://min.us/mrqgNnw5P) – Sviatoslav

+0

Cảm ơn ví dụ! Tôi sẽ recommand để thay đổi LayoutParams.FILL_PARENT bởi LayoutParams.MATCH_PARENT – Dax

8

này giống như 1 câu trả lời, nhưng mà không cần phải tạo một tập tin 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

cảm ơn, nó là tốt đẹp để biết rằng ai đó hiểu lập trình. –

+0

Cảm ơn bạn rất nhiều! +1 cho setContentView (bố cục) – Benny

0

Tôi gặp sự cố, số lượt xem được đặt trên giao diện người dùng được đặt trong khi chạy. Vì vậy, tôi quyết định rằng tôi chỉ muốn có bốn lượt xem trong một hàng và điều chỉnh mã ở trên cho phù hợp. Ngoài ra, tôi luôn lấp đầy hàng cuối cùng với chỉnh sửa văn bản vô hình do đó quan điểm ở hàng cuối cùng cũng đã có chiều rộng tương tự như quan điểm ở hàng trên:

 // 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

Điều này sẽ giúp

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); 
      } 



      } 
     } 
Các vấn đề liên quan