2011-08-25 15 views
19

Jak utworzyć listę przycisków jeden po drugim w kilku liniach? zrobiłem tak: Jak programowo dodawać przyciski do układu jeden po drugim w kilku liniach?

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 dostał tylko jedną linię:

I got this
Jak przejść do następnej linii programowo?

+0

Moim pierwszym pomysłem była zmiana metody getView() w niestandardowym SimpleCursorAdapter dla ListView, ale może być łatwiejsze programowanie przycisków. Pytam tutaj. Być może ktoś zadecydował o tym. – Sviatoslav

+0

Mogę ci odpowiedzieć, ale pytanie jest zamknięte:/ –

+1

@ B.Young: Ponownie otwarte. –

Odpowiedz

37

Problem polega na tym, że przyciski nie będą automatycznie owijać się w następną część ekranu. Musisz konkretnie powiedzieć Androidowi, w jaki sposób chcesz ustawić swoje Widoki. Robisz to używając ViewGroups takich jak LinearLayout lub 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); 
} 

Jestem zakładając, że R.id.linear_layout_tags jest LinearLayout rodzic Twojego XML dla tej działalności.

Zasadniczo to, co tu robisz, tworzysz LinearLayout, który będzie rzędem do trzymania czterech przycisków. Następnie dodaje się przyciski i każdemu z nich przypisuje się liczbę jako jej identyfikator. Po dodaniu wszystkich przycisków wiersz zostanie dodany do układu aktywności. Potem się powtarza. To tylko jakiś pseudo kod, ale prawdopodobnie zadziała.

No i następnym razem należy poświęcić więcej czasu na swoje pytanie ...

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

+1

Ten kod jest dobry, gdy wiemy, że 3 przyciski zawsze umieszczane są w rzędzie. Ale co zrobić, gdy tekst w przycisku jest pobierany z 'Cursora' (z bazy danych)? Szerokość przycisku może być taka, że ​​tylko dwa przyciski zmieszczą się w rzędzie. Trzeci przycisk musi przejść w następnym rzędzie. I jak mogę usunąć niektóre z przycisków po kliknięciu. Być może muszę zmienić 'getView()' w niestandardowym 'SimpleCursorAdapter' dla tego. Chcę coś takiego: [link] (http://min.us/mrqgNnw5P) – Sviatoslav

+0

Dzięki za przykład! Poleciłbym zmienić LayoutParams.FILL_PARENT przez LayoutParams.MATCH_PARENT – Dax

8

To jest jak 1 odpowiedzi, ale bez konieczności dokonywania plik 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

dzięki, miło jest wiedzieć, że ktoś rozumie programowo. –

+0

Dziękuję bardzo! +1 dla setContentView (układ) – Benny

0

Miałem problem z tym, że liczba wyświetleń, które należy umieścić w interfejsie, została ustawiona podczas pracy. Postanowiłem więc, że chcę tylko cztery widoki w jednym wierszu i odpowiednio dostosowałem powyższy kod. Ponadto, zawsze wypełnione ostatni wiersz z niewidzialnych edycji tekstów tak, że poglądy w ostatnim rzędzie miał także taką samą szerokość jak widoki w wierszu powyżej:

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

Pomoże to

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



      } 
     } 
Powiązane problemy