2013-06-10 10 views
10

में स्क्रीन से बड़े वजन के साथ स्क्रॉल करने योग्य लाइनरलेआउट मैं वजन के साथ एक लंबवत रैखिकरण बनाने की कोशिश कर रहा हूं जिसमें स्क्रीन से बड़ा आकार बड़ा है। आइए स्क्रीन के 2x आकार का कहना है। काम करने के लिए मुझे स्पष्ट रूप से इसके माध्यम से स्क्रॉल करने में सक्षम होना चाहिए। दुर्भाग्य से मैं ऐसा करने का कोई तरीका नहीं समझ सकता। मैंने लेआउट वजन का उपयोग करने की कोशिश की, और वजन घटाने को सभी घटकों के वजन के वास्तविक योग के आधे हिस्से के रूप में सेट किया (इसलिए यदि सभी घटकों का वजन योग 20 है, तो मैंने वजन राशि को 10 के रूप में सेट किया है) और दुर्भाग्य से यह काम करने में कामयाब रहा स्क्रॉलिंग किसी कारण से अब और काम नहीं कर रहा है।स्क्रॉल करने योग्य लाइनरलेआउट एंड्रॉइड

क्या कोई ऐसी चीज है जो मुझे याद आ रही है?

इस

कोड कि LinearLayout दो बार के रूप में स्क्रीन के रूप में बड़ा बनाता है, लेकिन पुस्तक काम कर रहा है नहीं:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:fillViewport="true"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:weightSum="2"> 

     <EditText android:id="@+id/id1" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:textSize="25dp" 
      android:gravity="center" 
      android:layout_weight="2"/> 

     <EditText android:id="@+id/id2" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:textSize="25dp" 
      android:gravity="center" 
      android:layout_weight="2"/> 

    </LinearLayout> 
</ScrollView> 

उत्तर

7

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

लेआउट:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_horizontal" 
    android:background="#000000" 
    android:fillViewport="true" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#FFFFFF" 
     android:orientation="vertical" > 

     <EditText 
      android:id="@+id/id1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#DCDCDC" 
      android:gravity="center" 
      android:text="ONE ONE ONE" 
      android:textIsSelectable="false" 
      android:textSize="45sp" /> 

     <EditText 
      android:id="@+id/id2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#AAAAAA" 
      android:gravity="center" 
      android:text="TWO TWO TWO" 
      android:textIsSelectable="false" 
      android:textSize="45sp" /> 

     <EditText 
      android:id="@+id/id3" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#777777" 
      android:gravity="center" 
      android:text="THREE THREE THREE" 
      android:textIsSelectable="false" 
      android:textSize="45sp" /> 
    </LinearLayout> 

</ScrollView> 

गतिविधि:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Get display size -- API L13 and up. Otherwise use getResources().getDisplayMetrics(); 
     Display display = getWindowManager().getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 


     // You want size to be 50% per EditText, so divide available height by 2. 
     // Note: this is absolute height, does not take into consideration window decoration! 
     int editTextHeight = size.y/2; 

     // Get a handle to your EditTexts 
     EditText t1 = (EditText) findViewById(R.id.id1); 
     EditText t2 = (EditText) findViewById(R.id.id2); 
     EditText t3 = (EditText) findViewById(R.id.id3); 

     // Set height to 50% of screen size each 
     t1.setHeight(editTextHeight); 
     t2.setHeight(editTextHeight); 
     t3.setHeight(editTextHeight); 
} 

कि यह करूँगा।अंतिम परिणाम:

EditText 50% screen height EditText 50% screen height EditText 50% screen height

+2

उत्तर के लिए धन्यवाद। मुझे पता था कि यह प्रोग्रामेटिक तरीके से कैसे करें, लेकिन अभी भी यह पुष्टि करने के लिए निश्चित रूप से बकाया राशि के लायक है कि यह शुद्ध एक्सएमएल में नहीं किया जा सकता है –

1

समस्या यहाँ layout_weight के आपके उपयोग और weightSum अमान्य है। यह याद रखना महत्वपूर्ण है कि android:layout_weight केवल दृश्य स्थान दृश्य में उपलब्ध हो सकता है; उस सीमा से अधिक कुछ भी स्वचालित रूप से फसल हो जाती है।

इसलिए, आपके उदाहरण में, आपका पहला EditText स्क्रीन की संपूर्णता ले रहा है, और आपका दूसरा व्यक्ति पूरी तरह से दृश्य से बाहर रखा गया है। क्योंकि दूसरा EditText फसल हो गया है, LinearLayout ने पूरी स्क्रीन ली है और ScrollView के लिए कुछ भी नहीं है।

मुझे पूरा यकीन नहीं है कि आपका अंतिम लक्ष्य क्या है; क्या आप उपयोगकर्ता प्रविष्टि के साथ बढ़ने वाले पाठ इनपुट रखने की कोशिश कर रहे हैं, और ScrollView ओवरफ़्लो को संभालता है?

यदि हां, तो यह काम करेगा:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_horizontal" 
    android:background="#000000" 
    android:fillViewport="true" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#FFFFFF" 
     android:orientation="vertical" > 

     <EditText 
     android:id="@+id/id1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#DCDCDC" 
     android:gravity="center" 
     android:text="ONE ONE ONE" 
     android:textIsSelectable="false" 
     android:textSize="45sp" /> 

    <EditText 
     android:id="@+id/id2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#AAAAAA" 
     android:gravity="center" 
     android:text="TWO TWO TWO" 
     android:textIsSelectable="false" 
     android:textSize="45sp" /> 
    </LinearLayout> 

</ScrollView> 

मैं कुछ बुनियादी पृष्ठभूमि रंग को शामिल किया है ताकि आप देख सकते हैं, जहां प्रत्येक आइटम लेआउट पूर्वावलोकन में & समाप्त होता है शुरू होता है। पहले EditText में टाइपिंग स्क्रॉल बार का उत्पादन करके दूसरे को सही ढंग से दबाएगी।

यह भी ध्यान रखें कि dp के बजाय textSize मानों के लिए आपको sp का उपयोग करना चाहिए।

संपादित करें: मुझे स्पष्टीकरण के लिए भी ध्यान रखना चाहिए कि weightSum स्थान आवश्यक होने पर भी ले जाएगा। इसका परीक्षण करने के लिए, weightSum को अपने LinearLayout से 2 पर सेट करें, और उसके बाद EditText नियंत्रणों में से प्रत्येक को android:layout_weight="1" जोड़ें। व्यू लोड होने पर अंतिम परिणाम 50/50 विभाजन होगा, और फिर जब आप पहले नियंत्रण में टाइप करना शुरू करेंगे, तो दूसरी जगह तदनुसार घट जाएगी। दूसरे नियंत्रण में पाठ जोड़ना परिणामस्वरूप स्क्रॉलबार दिखाई देगा।

+0

हैलो। उत्तर के लिए धन्यवाद। असल में, एक वाक्य में, जो मैं प्राप्त करने की कोशिश कर रहा हूं उसका एक अच्छा उदाहरण 3 टेक्स्टव्यूज़ है, प्रत्येक स्क्रीन आकार के आकार 1/2 के साथ। इसका मतलब है कि 2 स्क्रीन में दिखाई देगा और तीसरा स्क्रॉल होने पर ही दिखाई देगा। –

+1

शुद्ध एक्सएमएल में ऐसा करने का कोई तरीका नहीं है; आपको स्क्रीन को मापना होगा और दृश्य ऊंचाई को कोड में सेट करना होगा। मैं आपके लिए नमूना प्रदान कर सकता हूं। –

+0

@sakiskaliakoudas जिसके लिए आप लेआउट_हेइट 0 डीपी और leyout_weight के रूप में सेट सेट करना चाहते हैं 0.5 –

3

आप अपने LinearLayout "match_parent" है कि उसके माता-पिता ऊंचाई के बराबर है की ऊंचाई की घोषणा की। यह तब तक स्क्रॉल नहीं करेगा जब तक सामग्री ScrollView बड़ी हो। सबसे पहले आपको एक निश्चित ऊंचाई (50 डीपी) या wrap_content देना होगा या आपको इसकी ऊंचाई प्रोग्रामेटिक रूप से सेट करना होगा (जैसा कि आप उल्लेख करते हैं 2x स्क्रीन ऊंचाई)।

weightSum और weight हमेशा आपके आइटम को आपके LinearLayouts वर्तमान आकार में फिट करने के लिए मजबूर करेगा, इसलिए इसका उपयोग न करने का प्रयास करें।

मुझे उम्मीद है कि इससे मदद मिलती है।

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