2011-08-25 19 views
19

Düğmelerin bir listesi birkaç satırda nasıl oluşturulur? Bunu yapan: Düğmeleri birkaç satırda tek tek düzende nasıl programa ekleyebilirim?

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

ve tek bir satır var:

I got this
Nasıl programlı sonraki satıra gitmek için?

+0

İlk düşüncem, getView() 'ı ListView için özel SimpleCursorAdapter olarak değiştirmekti, ancak program aracılığıyla düğmeleri koymak daha kolay olabilirdi. Ben de burada rica ediyorum. Bu soruya birisi karar verebilir. – Sviatoslav

+0

Bunu sizin için cevaplayabiliyorum ama soru şu şekilde kapalı:/ –

+1

@ B.Young: Yeniden açıldı. –

cevap

37

Sorun, düğmelerinizin otomatik olarak ekranın sonraki bölümüne kaydırılmayacağıdır. Android'e, Görünümlerinizin nasıl konumlanmasını istediğinizi özellikle belirtmeniz gerekir. Bunu, LinearLayout veya RelativeLayout gibi ViewGroups kullanarak yaparsınız.

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

Ben R.id.linear_layout_tags bu etkinlik için XML ana LinearLayout olduğunu varsayıyorum.

Temel olarak burada yaptığınız şey, dört düğmenizi tutacak bir satır olacak bir LinearLayout yaratıyor olmanızdır. Ardından düğmeler eklenir ve her birine kimlikleri kadar aşamalı olarak bir numara verilir. Tüm düğmeler eklendiğinde, satır etkinliğinizin düzenine eklenir. Sonra tekrar eder. Bu sadece bazı sahte kodlar ama muhtemelen işe yarayacak.

Oh ve bir dahaki sefere sorunuza daha fazla vakit geçirmek emin olun ...

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

+1

Bu kod, 3 düğmenin daima bir satırda yerleştirildiğini bildiğimiz zaman iyidir. Ancak düğmedeki metin imleçten (veritabanı) alındığında ne yapılmalı? Düğmenin genişliği öyle olabilir, sadece iki düğme bir sıraya sığacaktır. Yani üçüncü düğme sonraki satırda gitmeli. Ve üzerine tıkladığınızda bazı düğmeleri nasıl silebilirim. Bunun için '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'getView()' değiştirmeliyim. Bunun gibi bir şey istiyorum: [link] (http://min.us/mrqgNnw5P) – Sviatoslav

+0

Örnek için teşekkürler! LayoutParams.MATCH_PARENT – Dax

8

Bu 1 cevap gibidir, ama bir XML dosyası oluşturmaktır gerek kalmadan.

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

tarafından LayoutParams.FILL_PARENT değerini değiştirmeyi öneririm, birinin programlı olarak anladığını bilmek güzel. –

+0

Çok teşekkür ederim! SetContentView (düzen) için +1 – Benny

0

Sorunum vardı, kullanıcı arabiriminde yerleştirilecek görünüm sayısı çalışma zamanı sırasında ayarlandı. Bu yüzden, bir satırda yalnızca dört görünüm istediğime ve yukarıdaki kodu buna göre uyarlamaya karar verdim. son sırada görüşleri de yukarıdaki satırda görünümleri ile aynı genişliğe sahip olacak şekilde Ayrıca, her zaman görünmez düzenleme metinleriyle son satırı doldurdu: Bu yardımcı olacaktır

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



      } 
     } 
İlgili konular