2011-08-25 13 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.Young: फिर से खोला गया। –

उत्तर

37

समस्या यह है कि आपके बटन स्क्रीन के अगले भाग में स्वचालित रूप से लपेटने वाले नहीं हैं। आपको विशेष रूप से एंड्रॉइड को बताना होगा कि आप अपने विचारों को कैसे रखना चाहते हैं। आप इसे ViewGroups जैसे LinearLayout या 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); 
} 

मैं यह सोचते हैं रहा है कि R.id.linear_layout_tags इस गतिविधि के लिए अपने XML की मूल LinearLayout है।

असल में आप यहां क्या कर रहे हैं यह है कि आप एक लाइनरलाइट बना रहे हैं जो आपके चार बटन पकड़ने के लिए एक पंक्ति होगी। फिर बटन जोड़े जाते हैं और प्रत्येक को अपनी आईडी के रूप में वृद्धि संख्या असाइन की जाती है। एक बार सभी बटन जोड़े जाने के बाद, पंक्ति को आपकी गतिविधि के लेआउट में जोड़ा जाता है। फिर यह दोहराता है। यह सिर्फ कुछ छद्म कोड है लेकिन यह शायद काम करेगा।

ओह और अगली बार आपके प्रश्न पर अधिक समय बिताने के लिए सुनिश्चित हो ...

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

+1

यह कोड अच्छा है जब हम जानते हैं कि 3 बटन हमेशा एक पंक्ति में रखे जाते हैं। लेकिन बटन में पाठ 'कर्सर' (डेटाबेस से) से लिया जाने पर क्या करना है? बटन की चौड़ाई इतनी हो सकती है कि केवल दो बटन एक पंक्ति में फिट होंगे। तो तीसरी बटन अगली पंक्ति में जाना चाहिए। और जब मैं उस पर क्लिक करता हूं तो मैं कुछ बटन कैसे हटा सकता हूं। मुझे इसके लिए कस्टम 'SimpleCursorAdapter' में' getView() 'बदलना होगा। मुझे इस तरह की गंध चाहिए: [लिंक] (http://min.us/mrqgNnw5P) – Sviatoslav

+0

उदाहरण के लिए धन्यवाद! मैं LayoutParams.MATCH_PARENT – Dax

8

यह 1 उत्तर की तरह है, लेकिन एक एक्सएमएल फ़ाइल बनाने के लिए आवश्यकता के बिना।

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

धन्यवाद द्वारा LayoutParams.FILL_PARENT को बदलने की सिफारिश करता हूं, यह जानना अच्छा है कि कोई प्रोग्रामेटिक रूप से समझता है। –

+0

बहुत बहुत धन्यवाद! SetContentView (लेआउट) के लिए +1 – Benny

0

मुझे समस्या थी, कि यूआई पर रखे जाने वाले विचारों की संख्या रनटाइम के दौरान सेट की गई थी। तो मैंने फैसला किया कि मुझे एक पंक्ति में केवल चार विचार चाहिए और तदनुसार कोड को अनुकूलित करें। इसके अलावा, मैं हमेशा अंतिम पंक्ति अदृश्य ग्रंथों संपादित से भरा ताकि अंतिम पंक्ति में देखा गया भी ऊपर पंक्ति में विचारों के रूप में एक ही चौड़ाई थी:

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



      } 
     } 
संबंधित मुद्दे