2013-01-21 15 views
5

काम नहीं कर रहा है, मैं एक साधारण GridLayout का उपयोग कर रहा हूं जिसमें मैं गतिशील रूप से बटन जोड़ रहा हूं।GridLayout के लिए SetGravity

<GridLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/tagGridLayout" 
android:background="@color/white" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:columnCount="3" 
> 
</GridLayout> 

और मैं अपने ग्रिड को भरने के लिए इस जावा कोड का उपयोग कर रहा हूं जो कि ठीक काम कर रहा है सिवाय इसके कि सेट ग्रेविटी विकल्प कुछ भी नहीं करता है। मैंने कोशिश की है - एक्सएमएल फ़ाइल में विभिन्न प्रकारों में लेआउट_विड्थ बदलना, GridLayout आदि में गुरुत्वाकर्षण जोड़ना जैसा कि इस साइट के अन्य समाधानों में उल्लिखित है। ध्यान देने योग्य एक और बात यह है कि मैं इसे एक टुकड़े के अंदर एक Async कार्य में कर रहा हूँ। मूल रूप से मैं प्राप्त करना चाहता हूं कि layout_gravity="fill_horizontal" एक्सएमएल में प्राप्त करता है।

tagButtons = new Button[trendingTagsCount]; 
     for(int i=0;i<trendingTagsCount;i++) 
     { 
      tagButtons[i] = new Button(getActivity()); 
      //tagButtons[i].setLayoutParams(new LayoutParams(Gravity.FILL_HORIZONTAL)); 
      tagButtons[i].setText(getTagsList.get(i).tag); 
      tagButtons[i].setGravity(Gravity.FILL_HORIZONTAL); 
      tagButtonGrid.addView(tagButtons[i]); 
     } 
+0

अभी भी जवाब नहीं मिला है हालांकि मैंने बटन.सेटमैक्सविड्थ() और ऊंचाई के लिए एक समझौता किया है। – RaWa

+0

आप ऐसा कुछ कर सकते हैं ... लेआउटपार्म परम; एलपी = (लेआउट पैराम्स) टैगबटन [i] .getLayout पैराम(); lp.gravity = गुरुत्वाकर्षण। FILL_HORIZONTAL; टैगबटन [i] .setLayout पैराम (एलपी); –

उत्तर

3

करण मेर के रूप में आप GridLayout.LayoutParams साथ लेआउट ग्रेविटी सेट कहा।

लेकिन सावधान रहें, Gridlayout में आप से पहले (बटन अपने मामले में) बच्चे की columnSpec/rowSpec सेट करने के लिए:

param.columnSpec = GridLayout.spec(0); 
param.rowSpec = GridLayout.spec(0); 

और उसके बाद ही

param.setGravity(Gravity.RIGHT); 

अगर columnSpec/rowSpec अपरिभाषित जब आप setGravity करते हैं, गुरुत्वाकर्षण काम नहीं करता है ...

यहां तक ​​कि अगर आप ऐसा करेंगे:

param.setGravity(Gravity.RIGHT); 
param.columnSpec = GridLayout.spec(0); 
param.rowSpec = GridLayout.spec(0); 

गुरुत्वाकर्षण काम नहीं करता है ...

सही तरीका है:

param.columnSpec = GridLayout.spec(0); 
param.rowSpec = GridLayout.spec(0); 
param.setGravity(Gravity.RIGHT); 

अगर एक बग या एक विचार बात है मैं नहीं जानता। (मैं एंड्रॉइड एपीआई 1 9 का उपयोग कर रहा हूं)