2012-06-06 8 views
12

का समर्थन नहीं कर रहा है मैं निम्नलिखित लेआउट के साथ एक एंड्रॉइड एप्लिकेशन बना रहा हूं। application layoutViewPager layout_height = wrap_content

यह पहले से ही ज्ञात है कि layout_height="wrap_content" ViewPager के लिए काम नहीं करता है।

मेरा सवाल यह है कि इसे गतिशील रूप से कैसे बदला जाए। ViewPager की सामग्री के दो एक्सएमएल लेआउट से फुलाया जाता है, vp_statistics.xml and vp_campaigns.xml.

यहाँ ViewPager

<LinearLayout 
      android:id="@+id/topcontent_wrapper" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:orientation="vertical" > 
</LinearLayout> 

<LinearLayout 
      android:id="@+id/viewpager_wrapper" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:orientation="vertical" > 

      <android.support.v4.view.ViewPager 
       android:id="@+id/viewpager" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 
</LinearLayout> 

के लिए एक्सएमएल है यहाँ मेरी PagerAdapter

class MyPagerAdapter extends PagerAdapter{ 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return 2; 
} 

public Object instantiateItem(View collection, int pos){ 
    LayoutInflater inflater =  (LayoutInflater)collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    int resId = 0; 
    switch(pos){ 
    case 0: 
     resId = R.layout.vp_statistics; 
     break; 
    case 1: 
     resId = R.layout.vp_campaigns; 
     break; 
    } 

    View view = inflater.inflate(resId, null); 


    ((ViewPager)collection).addView(view, 0); 

    return view; 
} 

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    // TODO Auto-generated method stub 
    ((ViewPager)container).removeView((View)object); 
} 

@Override 
public boolean isViewFromObject(View arg0, Object arg1) { 
    // TODO Auto-generated method stub 
    return arg0 == ((View)arg1); 
} 

@Override 
public Parcelable saveState() { 
    // TODO Auto-generated method stub 
    return null; 
} 

} 

और मेरे onCreate अंदर() mthod के लिए कोड है गतिविधि वर्ग का:

MyPagerAdapter adapter = new MyPagerAdapter(); 
ViewPager viewPager = (ViewPager)findViewById(R.id.viewpager); 
viewPager.setAdapter(adapter); 
viewPager.setCurrentItem(0); 

क्या कोई तरीका प्राप्त करने का कोई तरीका है vp_statistics.xml और vp_campaigns.xml लेआउट की ऊंचाई और instantiateItem() ऑब्जेक्ट को हर बार ViewPager (@id/viewpager) पर गतिशील रूप से असाइन करें?

+0

क्या आपने समस्या को ठीक किया? मेरे पास एक समान है। – Matroska

+0

क्या आपको इस – koti

+0

के लिए समाधान मिला है कृपया समस्या को ठीक करें https://code.google.com/p/android/issues/detail?id=54604 – Christ

उत्तर

0

उपयोग wrap_content के बजाय 0dp, और के लिए गतिशील रूप से परिवर्तित कि

pager = new ViewPager(this); 
     pager.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
+8

आपका कोड काम नहीं करता है, यह वास्तव में एप्लिकेशन को क्रैश करता है। सही कोड 'पेजर.सेट लयआउट पैराम (नया रैखिक लयआउट। लेआउट पैराम (लेआउट पैराम्स.फिल_PARENT, लेआउट पैराम्स। रैप_CONTENT)); लेकिन बदले गए कोड के साथ भी, यह ViewPager की ऊंचाई को नहीं बदलता है। –

-1

आदेश में layout_weight पैरामीटर का उपयोग करने की कोशिश प्रत्येक रेखीय लेआउट के लिए अलग स्क्रीन अचल संपत्ति आवंटित करने के लिए। इस 'गतिशील' वज़न परिवर्तन को प्राप्त करने के लिए आप इस कोड को फिर से सौंप सकते हैं। अवलोकन here कैसे कोड में वजन लेआउट को प्राप्त करने की गूगल करने योग्य उदाहरण के बहुत सारे के साथ ...

+0

जो मैं अपने आवेदन में करने की कोशिश कर रहा हूं वह शीर्ष लेआउट और नीचे ViewPager को प्रत्येक के लिए स्क्रीन का आधा देने के लिए वजन कम नहीं करना है, मैं ViewPager की ऊंचाई पर अलग-अलग मान असाइन करने का प्रयास कर रहा हूं प्रत्येक बार ViewPager पृष्ठ बदलता है, क्योंकि ViewPager पृष्ठों का प्रतिनिधित्व करने वाले लेआउट ऊंचाई में भिन्न होते हैं। और, उदाहरण के लिए यदि पहले पृष्ठ में 200 डीपी की ऊंचाई है और मैं दूसरे पेज (जो 400 डीपी है) में बदलते समय व्यूअर लेआउट_हेइट = "200 डीपी" असाइन करता है, तो नीचे 200 डीपी छिपा हुआ है! –

+0

अरे आंद्रेई, ऐसा लगता है कि ड्रॉ पूरा होने के बाद इसे देखने के बाद आपको दृश्य को मापने की आवश्यकता है और अपनी दृश्य पेजर चौड़ाई और ऊंचाई अपडेट करें। मैंने Google चार्ट्स को वेब व्यू में एम्बेड करते समय हाल ही में एक समान कार्य शुरू किया। विषय पर [यह उत्तर] देखें (http://stackoverflow.com/a/4406090/1348379)। यह आपकी मदद करेगा। – OceanLife

6
  1. माता पिता LinearLayout करने के लिए एक weightSum=2 विशेषता जोड़ें, और orientation=vertical निर्धारित किया है।
  2. शीर्ष बच्चे LinearLayout के layout_weight=1 सेट करें। इसके अलावा, layout_weight=1 और layout_height=0dip
+0

धन्यवाद यूसुफस ने मेरे लिए काम किया –

+0

बिल्कुल काम नहीं करता है। –

+0

@bagusflyer अगर आप अपना कोड साझा करते हैं, तो हम देख सकते हैं कि इसमें क्या गलत है। – josephus

-2

उपयोग RelativeLayout साथ layout_height=0dip

  • लपेटें ViewPager सेट एक और LinearLayout में:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:orientation="vertical" > 
    
        <LinearLayout 
         android:id="@+id/layout" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:orientation="horizontal" > 
    
        </LinearLayout> 
    
        <android.support.v4.view.ViewPager 
         android:id="@+id/pager" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_alignParentBottom="true" 
         android:layout_below="@+id/layout" > 
    
        </android.support.v4.view.ViewPager> 
    
    </RelativeLayout> 
    
  • 2

    मैं एक ऐसी ही सवाल here जवाब दे दिया।

    समाधान wrap_content सिर्फ ऊंचाई के लिए काम करने के लिए onMeasure() ओवरराइड करने के लिए ViewPager फैली हुई है।