2012-05-03 16 views
10

ViewGroup.addView क्लोन LayoutParams डेटा के अंदर या इसके अंदर के लिंक? क्या मैं अलग-अलग विचारों के साथ addView() पर एकाधिक कॉल के साथ LayoutParams का एक ही उदाहरण पुन: उपयोग कर सकता हूं?क्या मैं ViewGroup.addView के साथ लेआउटप्रम्स का पुन: उपयोग कर सकता हूं?

एपिडोक में इसके बारे में कुछ भी नहीं है।

वाह

जवाब नहीं (प्रयोगात्मक जाँच) किया जाता है:

public class SymbolPadActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    RelativeLayout.LayoutParams labelParams; 

    /* 
    * This block to reuse is not working 
    labelParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    labelParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
    labelParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 
    */ 


    RelativeLayout mover = new RelativeLayout(this); 

    TextView textView; 
    for(int leftMargin = 0; leftMargin<3000; leftMargin += 100) { 
     for(int topMargin=0; topMargin<800; topMargin += 40) { 

      // I can't omit these 3 lines 
      labelParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
      labelParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
      labelParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 

      labelParams.leftMargin = leftMargin; 
      labelParams.topMargin = topMargin; 

      textView = new TextView(this); 
      textView.setText("(" + leftMargin + "," + topMargin + ")"); 
      mover.addView(textView, labelParams); 

     } 
    } 




    RelativeLayout.LayoutParams moverParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    moverParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
    moverParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 
    moverParams.leftMargin = 0; 
    moverParams.topMargin = 0; 

    RelativeLayout stator = new RelativeLayout(this); 
    stator.addView(mover, 0, moverParams); 

    setContentView(stator); 


} 

}

+0

मैं अपने परम पुन: उपयोग किया है, यह काम किया! लेकिन मेरे कैमरेव्यू काम करना बंद करो। :/मैं लेआउटपार्म कन्स्ट्रक्टर में एक और एक ओ_ओ बनाने के लिए एक परम का पुन: उपयोग भी नहीं कर सकता। –

उत्तर

5

apidoc में इसके बारे में कुछ भी नहीं है।

इसका मतलब है कि आपको अधिक रूढ़िवादी विकल्प बनाने की आवश्यकता है, इससे कोई फर्क नहीं पड़ता कि वर्तमान कार्यान्वयन क्या है, क्योंकि कार्यान्वयन बदल सकता है।

इसलिए, आपको यह मानना ​​होगा कि LayoutParams के उदाहरण को पुन: उपयोग करने के लिए यह Views के उपयोग के लिए सहेजने के लिए सहेज नहीं है।

एफडब्ल्यूआईडब्ल्यू, AFAICT, यह वैसे भी सच है - ViewGroup एक प्रतिलिपि बनाने के लिए प्रतीत नहीं होता है।

1

यह एक पुरानी सवाल है, लेकिन वहाँ एक अद्यतन जवाब हो रहा है: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

ViewGroup.LayoutParams(ViewGroup.LayoutParams source) 

यह करने के लिए नहीं फिर से उपयोग सुझाव है:

LayoutParams एक और स्रोत कॉपी करने के लिए एक निर्माता है यह, लेकिन शायद आपको 1 लेआउट पैराम्स ऑब्जेक्ट बनाने की ज़रूरत है, तो बस

new LayoutParams(someLayoutParamsToReUse) 

मेरे मामले में, मैं चाहता था और एक बटन के लेआउट पैरा एक और बटन के समान होने के लिए। मैं शुरू में करने की कोशिश की:

button.setLayoutParams(button2.getLayoutParams()); 

यह काम नहीं करेगा, लेकिन यह कार्य करना चाहिए:

button.setLayoutParams(new LayoutParms(button2.getLayoutParams))' 
संबंधित मुद्दे

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