2012-11-02 21 views
8

में प्रोग्रामेटिक रूप से खंडों को जोड़ने के लिए मैंने एक रिलेटिवलाइट तैयार किया है। मैं इसमें टुकड़ा जोड़ने की कोशिश कर रहा हूं। यह ओवरलैप करता है। मुझे ऐसा करने की क्या ज़रूरत है कि यह दूसरे के नीचे एक आती है।relativelayout

FragmentTransaction t = getSupportFragmentManager().beginTransaction(); 

    FragmentTest myFragment = new FragmentTest(); 
    t.add(layout.getId(), myFragment, "myFirstFragment"); 

    FragmentTest myFragment2 = new FragmentTest(); 
    t.add(layout.getId(), myFragment2, "mySecondFragment"); 

    t.commit(); 

// myFragment और myFragment2 का विचार भले ही मैं खड़ी करने के लिए ओरिएंटेशन निर्धारित किया है चढ़ जाता है।

<RelativeLayout 
    android:id="@+id/idll1" 
    android:layout_width="fill_parent" 
    android:layout_height="50dp" 
    android:layout_marginLeft="10sp" 
    android:layout_marginRight="0sp" 
    android:layout_marginTop="10sp" 
    android:layout_weight="1" 
    android:paddingBottom="5dp" 
    android:paddingLeft="10dp" 
    android:paddingRight="5dp" 
    android:paddingTop="5dp" 
    android:orientation="vertical"/> 

उत्तर

0

मुझे लगता है कि यह LinearLayout

+0

क्या होता है जब मैं लाइन t.commit() के बाद LinearLayout का उपयोग करता हूं; मैं बटन जोड़ने की कोशिश करता हूं। layout.addView (बटन)। फिर बटन शीर्ष पर स्थित होता है तो 2 टुकड़े नीचे आते हैं। मैं उम्मीद करता हूं कि 2 खंड दृश्य शीर्ष या अतिरिक्त और फिर बटन के रूप में शीर्ष पर दिखाई देते हैं। लेकिन इस तरह यह नहीं होता है। कोई विचार? – Satish

2

आप अपने टुकड़ा के विचारों में लेआउट prarams सेट करने के लिए किया जाना चाहिए।

क्या वे एक्सएमएल या हार्डकोड हैं?

यदि वे हार्डकोड हैं, तो आपको फ़्रेमलायआउट रैपर प्राप्त करना होगा जो Google पिछड़ा संगत समर्थन लाइब्रेरी का उपयोग करके सभी खंडों के विचारों को रखता है और आपके व्यू के ऑनलेआउट या मेजर में इसके रिलेटिवेलआउट पैराम सेट करता है।

अन्यथा, यदि वे एक्सएमएल हैं, तो बस सापेक्ष नियम निर्धारित करें।

4

हम इस प्रकार के रूप में यह कर सकते हैं:

गतिविधि वर्ग जिसमें रिश्तेदार लेआउट मौजूद है। उस सापेक्ष लेआउट (mParentLayout) को गतिविधि के दृश्य पदानुक्रम के मूल तत्व होने दें। और रिश्तेदार लेआउट में जोड़ा जाने वाला टुकड़ा बटन (एमजीआईआरबीटीएन) के नीचे एक स्थिति पर mGridFragment होगा।

public class DroidOpsActivity extends FragmentActivity implements 
    OnClickListener { 

    private RelativeLayout mParentLayout = null; 
    private Button mGridBtn = null; 
    private FragmentManager mFragmentMgr = null; 
    private FragmentTransaction mFragmentTransc = null; 
    private Fragment mGridFragment = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     initialize(); 
    } 

    private void initialize() { 
     setContentView(R.layout.activity_droid_ops); 
     mParentLayout = (RelativeLayout) findViewById(R.id.parent_layout); 
     mGridBtn = (Button) findViewById(R.id.grid_button); 
     mFragmentMgr = getSupportFragmentManager(); 
     registerListener(); 
    } 

    private void registerListener() { 
     mGridBtn.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.grid_button: 
        loadFragment(); 
        mGridBtn.setEnabled(false); 
     break; 
     } 
    } 

    private void loadFragment() { 
     mGridFragment = new DroidOpsFragments(); 
     mFragmentTransc = mFragmentMgr.beginTransaction(); 
     mFragmentTransc.add(mParentLayout.getId(), mGridFragment); 
     mFragmentTransc.addToBackStack(null); 
     mFragmentTransc.commit(); 
    } 

    public RelativeLayout.LayoutParams fetchLayoutParams() { 
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
        LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 

     // We can add any rule available for RelativeLayout and hence can position accordingly 
     params.addRule(RelativeLayout.BELOW, mGridBtn.getId()); 
     return params; 
    } 
} 

संगत टुकड़ा वर्ग है जो गतिविधि के लेआउट के साथ तैनात किया जाना है।

public class DroidOpsFragments extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.view_word_grid, null); 

     // Here we are fetching the layoutParams from parent activity and setting it to the fragment's view. 

     view.setLayoutParams(((DroidOpsActivity) activity).fetchLayoutParams()); 
     return view; 
    } 

} 
+0

धन्यवाद। मेरे पास यह जांचने का समय नहीं है क्योंकि मैं अस्थायी रूप से इस परियोजना से दूर चले गए हैं। लेकिन निश्चित रूप से मैं इसे जांचूंगा और यदि यह काम करता है तो मैं आपका जवाब स्वीकार करूंगा। – Satish

0

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

@Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     ViewGroup.LayoutParams p = view.getLayoutParams(); 
     if (p instanceof CoordinatorLayout.LayoutParams) { 
      CoordinatorLayout.LayoutParams params = ((CoordinatorLayout.LayoutParams)p); 
      params.gravity = Gravity.END | Gravity.BOTTOM; 
      view.setLayoutParams(params); 
     } 
     else if (p instanceof RelativeLayout.LayoutParams) { 
      RelativeLayout.LayoutParams params = ((RelativeLayout.LayoutParams)p); 
      params.addRule(RelativeLayout.ALIGN_BOTTOM); 
      view.setLayoutParams(params); 
     } 
}