2013-08-25 8 views
18

एंड्रॉइड में, आप एक स्क्रॉल व्यू कैसे बना सकते हैं जिसकी अधिकतम ऊंचाई हो, और सामग्री लपेटें, मूल रूप से यह सामग्री को लंबवत रूप से लपेटती है, लेकिन अधिकतम ऊंचाई होती है?एंड्रॉइड में रैप सामग्री के साथ अधिकतम ऊंचाई कैसे सेट करें?

मैं

<ScrollView 
    android:id="@+id/scrollView1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
     android:maxHeight="200dp" 
    android:layout_alignParentBottom="true" > 

    <LinearLayout 
     android:id="@+id/maincontainer" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

    </LinearLayout> 
</ScrollView> 

की कोशिश की लेकिन यह काम नहीं कर रहा?

+0

यहां समस्या का एक और समाधान है: https://stackoverflow.com/questions/42694355/how-to-set-recyclerview-max-height/48970129#48970129 – user1506104

उत्तर

-4

यहाँ आप इस तरह अपने scrollview की ऊंचाई सेट कर सकते हैं -:

<ScrollView 
android:id="@+id/scrollView1" 
android:layout_width="match_parent" 
android:layout_height="200dp" 
android:layout_alignParentBottom="true" > 

      <LinearLayout 
      android:id="@+id/maincontainer" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      </LinearLayout> 
</ScrollView> 
+0

निश्चित रूप से प्रश्न का उत्तर नहीं देता है! – Maverick283

16

मैं scrollview बढ़ाया और कोड जोड़ दिया है इस सुविधा को लागू करने के लिए:

https://gist.github.com/JMPergar/439aaa3249fa184c7c0c

मुझे आशा है कि उपयोगी हो ।

+1

यह कार्यान्वयन एक बार में काम करता है। एकमात्र चीज जो मैं जोड़ूंगा वह अधिकतम/हाई पैरामीटर/res/values ​​/ attrs.xml फ़ाइल में एक्सएमएल में निर्दिष्ट करने में सक्षम होने के लिए है (http://developer.android.com/training/custom-views/create -view.html # customattr) – DNax

11

आप इसे प्रोग्रामेटिक रूप से कर सकते हैं।

private static class OnViewGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener { 
    private final static int maxHeight = 130; 
    private View view; 

    public OnViewGlobalLayoutListener(View view) { 
     this.view = view; 
    } 

    @Override 
    public void onGlobalLayout() { 
     if (view.getHeight() > maxHeight) 
      view.getLayoutParams().height = maxHeight; 
    } 
} 

और जोड़ने को देखने के लिए श्रोता:

view.getViewTreeObserver() 
        .addOnGlobalLayoutListener(new OnViewGlobalLayoutListener(view)); 

श्रोता विधि onGlobalLayout(), फोन करेगा जब दृश्य ऊंचाई बदल जाएगा।

+0

मुझे लगता है कि आपको अपने 'OnViewGlobalLayoutListener (व्यू व्यू)' कन्स्ट्रक्टर पर 'शून्य' को हटाने की आवश्यकता है। – Alex

20

आप (एक वर्ग के लिए एक दृश्य से विरासत में मिला में onMeasure ओवरराइड)

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    if (maxHeight > 0){ 
     int hSize = MeasureSpec.getSize(heightMeasureSpec); 
     int hMode = MeasureSpec.getMode(heightMeasureSpec); 

     switch (hMode){ 
      case MeasureSpec.AT_MOST: 
       heightMeasureSpec = MeasureSpec.makeMeasureSpec(Math.min(hSize, maxHeight), MeasureSpec.AT_MOST); 
       break; 
      case MeasureSpec.UNSPECIFIED: 
       heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST); 
       break; 
      case MeasureSpec.EXACTLY: 
       heightMeasureSpec = MeasureSpec.makeMeasureSpec(Math.min(hSize, maxHeight), MeasureSpec.EXACTLY); 
       break; 
     } 
    } 

    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 
+0

काम करता है। पसंद। जादू। –

+0

धन्यवाद! यह – Leon

+0

काम करता है अगर पूरी तरह से काम करता है। आपको बहुत - बहुत धन्यवाद! – Duyhungws

0

सेट scrollview ऊंचाई के लिए किसी भी दृश्य को यह जोड़ सकते हैं आप 2 linerlayout अंदर एक साथ और फिर सेट scrool दृश्य का उपयोग करना चाहिए के रूप में उन्हें बच्चे तो सेट मध्यम linerlayout लेआउट: सीमा स्क्रॉलव्यू ऊंचाई के लिए ऊंचाई।

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