2013-07-16 9 views
6

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

मान लें कि मेरे अंदर एक रैखिक लेआउट के साथ एक स्क्रॉल व्यू है, मैं यह कहना चाहता हूं कि स्क्रीन पर 250 डीपी ऊंचाई अधिकतम पर और 250 डीपी की जगह में फिट होने की तुलना में अधिक प्रविष्टियों के साथ आबादी के बाद स्वतंत्र रूप से स्क्रॉल करने योग्य हो।

क्या मैं अब है:

    <ScrollView 
         android:minWidth="25px" 
         android:minHeight="150px" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:id="@+id/XXXXXXX" 
         android:scrollbars="vertical"> 
         <LinearLayout 
          android:orientation="vertical" 
          android:minWidth="25px" 
          android:minHeight="25px" 
          android:layout_width="fill_parent" 
          android:layout_height="wrap_content" 
          android:id="@+id/XXXXXX" /> 
        </ScrollView> 

जब आबादी, scrollview और LinearLayout बस के रूप में लंबे समय के खिंचाव के रूप में वे एक "खिड़की" होने की सामग्री को प्रदर्शित करता है और यह सभी बजाय फिट करने के लिए की जरूरत है 250 डीपी/पीएक्स (किसी भी माप अच्छा होगा) सामग्री के साथ स्क्रॉल करने योग्य सामग्री के साथ।

मैं एंड्रॉइड प्लेटफ़ॉर्म पर नया हूं, इसलिए शायद उत्तर स्पष्ट है और मुझे भाषा समझ में नहीं आया, लेकिन किसी भी मदद की सराहना की जाएगी! धन्यवाद

--- सोल्वेड: ऊंचाई के साथ स्क्रॉलव्यू के बाहर एक रैखिक स्तर डालें।

उत्तर

1

आपको maxHeight की आवश्यकता है। लेकिन चूंकि विचार इसका समर्थन नहीं करते हैं, इसलिए आपको एक वर्कअराउंड का उपयोग करना होगा। इस उत्तर के बाहर

की जांच:

एक कस्टम वर्ग का विस्तार बनाएँ:

https://stackoverflow.com/a/13811461/770467

+0

मैं अपने लेख के साथ काम करने का आकार हिस्सा मिल गया है, लेकिन अब उस क्षेत्र स्क्रॉल नहीं है। मैंने नए कोड के साथ सवाल अपडेट किया है। अब तक के लिए धन्यवाद! – user2150445

+0

यह अजीब बात है, मैंने अभी एक नमूना चलाया है और यह ठीक है, यहां लेआउट है: http://pastebin.com/raw.php?i=R45Z7wBi – Androiderson

+0

@Exception पेस्ट में वेबसाइट "यह पेस्ट हटा दिया गया है!" –

9
कुछ मदद this जवाब से मैं एक बहुत ही बुनियादी scrollview घटक आप इस मामले के लिए उपयोग कर सकते हैं लपेट में कामयाब साथ

एक स्क्रॉलव्यू और निम्न संशोधनों को करें:

public class MaxHeightScrollView extends ScrollView { 

    private int maxHeight; 

    public MaxHeightScrollView(Context context) { 
     super(context); 
    } 

    public MaxHeightScrollView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(context, attrs); 
    } 

    public MaxHeightScrollView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(context, attrs); 
    } 

    @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    public MaxHeightScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
     init(context, attrs); 
    } 

    private void init(Context context, AttributeSet attrs) { 
     if (attrs != null) { 
      TypedArray styledAttrs = context.obtainStyledAttributes(attrs, R.styleable.MaxHeightScrollView); 
      maxHeight = styledAttrs.getDimensionPixelSize(R.styleable.MaxHeightScrollView_maxHeight, 200); //200 is a defualt value 
      styledAttrs.recycle(); 
     } 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST); 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
} 

और फिर एक मामूली चीज़ बाएं अपने मूल्य फ़ोल्डर की attrs.xml फ़ाइल में अपनी स्टाइल करने योग्य घोषित करना है (यदि आपके पास कोई नहीं है, तो बस इस प्रोजेक्ट के res फ़ोल्डर के मान फ़ोल्डर में इस नाम के साथ एक XML फ़ाइल बनाएं)। निम्नलिखित लाइनों वहाँ जोड़ें:

<declare-styleable name="MaxHeightScrollView"> 
    <attr name="maxHeight" format="dimension" /> 
</declare-styleable> 

और इस प्रकार अपने नए scrollview का उपयोग करें:

<com.yourpackage.MaxHeightScrollView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:maxHeight="300dp"> 
</com.yourpackage.MaxHeightScrollView> 

क्रेडिट जल्दी से इस लपेटकर ऊपर के लिए whizzle के पास जाओ!

1

मेरा सरल समाधान।
सेट ScrollView एक्सएमएल में अजी:

android:layout_height="wrap_content" 

इस कोड से 200 अधिकतम ऊंचाई निर्धारित करने के लिए करता है, तो वर्तमान मापा ऊंचाई है> 200

sv.measure(0, 0); 
if (nsv.getMeasuredHeight() > 200) { 
     LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
             ViewGroup.LayoutParams.MATCH_PARENT, 200); 
     sv.setLayoutParams(lp); 
} 

ScrollView मेरे उदाहरण में जोड़े LinearLayout में है, इसलिए मैंने LinearLayout.LayoutParams का उपयोग किया।

+0

आपको बहुत बहुत धन्यवाद, यह वही है जो मैं ढूंढ रहा था। – RobertoAllende

2

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

इसका यह भी अर्थ है कि यदि सामग्री छोटी है, तो स्क्रॉलव्यू की सामग्री (बच्चे) स्क्रीन को भरने के लिए आवश्यक रूप से खिंचाव नहीं कर सकती है।

आपको इसे ठीक करने में मदद करने के लिए, हमें आपकी समस्या का एक स्क्रीनशॉट देखने की आवश्यकता है।

शायद ScrollView पर android:fillViewport="true" की स्थापना आपकी समस्या का समाधान होगा:

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/scrollView1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true"> 
संबंधित मुद्दे