2011-09-24 7 views
22

अंदर LinearLayout में मार्जिन समझने की कोशिश कर रहा एक LinearLayout एक SrollView अंदर की आवश्यकता है और उस LinearLayoutScrollView से एक मार्जिन होना आवश्यक है। सबसे पहले, इस मुद्दे को हल करने के बारे में सोचने का एकमात्र तरीका LinearLayout था और इस अंतिम लेआउट पर मार्जिन सेट के साथ LinearLayout के अंदर था।एक scrollview

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:fillViewport="true" 
    android:background="@color/layout_color_green"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:background="@color/layout_color_yellow"> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_margin="10dp" 
      android:orientation="vertical" 
      android:background="@color/layout_color_blue"> 
     </LinearLayout> 
    </LinearLayout> 
</ScrollView> 

enter image description here

मेरा प्रश्न है: क्यों मैं ऐसा करने की जरूरत है कि वे अगर वे बाहरी LinearLayout.

उदाहरण में स्थापित किए गए काम नहीं होगा?

अगर मैं था केवल एक LinearLayout कोई मार्जिन होगा ...

उदाहरण:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:fillViewport="true" 
    android:background="@color/layout_color_green"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_margin="10dp" 
     android:orientation="vertical" 
     android:background="@color/layout_color_blue"> 
    </LinearLayout> 
</ScrollView> 

enter image description here

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

फिर भी, मैं समझना चाहता हूं कि LinearLayout के अंदर सरल मार्जिन ScrollView के अंदर क्यों काम नहीं करता है। क्योंकि यह ScrollView के अंदर नहीं है, तो यह ठीक काम करता है।

कोई भी जानता है क्यों?

ScrollView फैली FrameLayout:

उत्तर

16

मैं स्रोत कोड में एक छोटा सा खोदा। इस में कुछ मार्जिन मुद्दे हैं और ScrollView भी इसे हल करने की कोशिश नहीं कर रहा है। मार्जिन को मापने के दौरान मूल रूप से अनदेखा किया जाता है।

लेकिन अंत में इससे कोई फर्क नहीं पड़ता क्योंकि आप ScrollView पर पैडिंग को परिभाषित करने में सक्षम होना चाहिए (यह एक पुष्टि है, कोशिश नहीं की गई)। एक बच्चे के दृश्य के लिए मार्जिन की आवश्यकता नहीं होनी चाहिए।

+1

लेकिन बात यह है कि मार्जिन केवल समस्या नहीं हैं।यदि मेरे पास 'LinearLayout' ऊंचाई 'wrap_content' पर सेट है और सभी बच्चों की ऊंचाई' match_parent' पर सेट है, तो वास्तव में बच्चे 'fill_parent' होंगे, जो कि 'स्क्रॉल व्यू' से आता है। और 'wrap_content' नहीं' जो उनके प्रत्यक्ष माता-पिता 'लीनियरलाउट' से मूल्य है। यह समस्या तब भी नहीं होती है जब मैं एक 'LinearLayout' का उपयोग दूसरे के अंदर करता हूं। तो मुझे लगता है कि हम जानते हैं कि 'स्क्रॉलव्यू' के लिए और भी कुछ है !? –

+0

हां बिल्कुल। आपने उस व्यवहार को 'एंड्रॉइड' से भर दिया: fillViewport = "true" '। – Knickedi

+0

तो, क्या आप अनुशंसा करते हैं कि मैं मार्जिन के बजाय पैडिंग के साथ जाऊं और 'लीनियरलाउट' के सभी बच्चों को 'wrap_content'' पर सेट करूँ? –

11

हैलो Knickedi और रिकार्डो एमराल,

हालांकि इस जवाब के रूप में हल, लेकिन मैं इस मुद्दे पर कुछ रोशनी डालना चाहते चिह्नित है।

जैसा कि नाइची ने कहा, स्क्रॉलव्यू फ्रेमलेआउट को बढ़ाता है।

तो मेरा जवाब यह है कि आप scrollView के भीतर LinearLayout के layout_gravity सेट कर सकते हैं और फिर layout_margin लाइनरलाउट में लाइनरलेआउट के साथ लाइनरलायआउट में काम करेगा।

मुझे एक ही समस्या थी और मैंने इसे लागू किया है और यह मेरे लिए काम करता है। :)

उदाहरण:

<ScrollView 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 

       <LinearLayout 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_gravity="top" 
        android:layout_marginTop="30dp" 
        android:orientation="vertical" > 
</ScrollView> 
+2

यह स्वीकार्य उत्तर होना चाहिए। समस्या हल हो गई है – deej

+1

यह टी होना चाहिए उसने जवाब स्वीकार कर लिया। –