2015-12-01 1 views
17

मैं एक लेआउट है कि इस तरह दिखता है के साथ एक लेआउट लपेट:textviews

<RelativeLayout> 
<!--aligned parent top--> 
</<RelativeLayout> 
<FlowLayout> 
<!--Should fill remaining space--> 
</FlowLayout> 
<RelativeLayout> 
<!--aligned parent bottom--> 
</<RelativeLayout> 

मैं FlowLayout इस्तेमाल किया textviews की एक सूची दिखाने के लिए (इसमें 10-15 textviews हो सकती है)। इसलिए, उपलब्ध खाली स्क्रीन स्पेस के आधार पर, मैं टेक्स्टव्यू की संख्या दिखाना चाहता हूं। उदाहरण के लिए, यदि वहां 15 टेक्स्टव्यू दिखाई देने हैं और बड़ी स्क्रीन में 10 टेक्स्टव्यू के लिए जगह है, तो मैं 9 टेक्स्टव्यू दिखाना चाहता हूं और अंतिम टेक्स्टव्यू में "+6" दिखाना चाहता हूं। एक छोटी स्क्रीन स्पेस में केवल 5 टेक्स्टव्यू के लिए उपलब्ध हो सकता है, जिसमें मैं अंतिम टेक्स्टव्यू में "+11" के साथ 4 टेक्स्टव्यू दिखाना चाहता हूं। स्पष्ट समझ के लिए, यहां स्क्रीनशॉट है। जैसा कि आप देख सकते हैं, प्रदर्शित होने के लिए टेक्स्टव्यू की वास्तविक संख्या 5 है, लेकिन 2 प्रदर्शित हैं, और +3 जोड़ा गया है। इसी तरह, उपलब्ध स्क्रीन स्पेस के आधार पर, मैं लेआउट में टेक्स्टव्यू की संख्या जोड़ना चाहता हूं।

यह प्रोग्रामेटिक रूप से कैसे प्राप्त किया जा सकता है?

enter image description here

+0

क्या आप अपने फ़्लोलाउट में कितने टेक्स्टव्यू दिखाई दे सकते हैं? – Sree

+0

या अन्यथा आप स्क्रॉलव्यू में डाल देंगे। तो आपको गिनना नहीं है। – KDeogharkar

+0

मैं फ़्लो लेआउट स्क्रॉल नहीं करना चाहता हूं। जैसा कि आप उपरोक्त स्क्रीनशॉट में देख सकते हैं, मैं स्क्रीन के रूप में टेक्स्टव्यू की संख्या के रूप में प्रदर्शित करना चाहता हूं, और अंत में "शेष" दिखा सकता हूं। –

उत्तर

2

एक पाश में textviews जोड़ने का प्रयास करें इम सोच, एक नया OnPreDrawListener में अलग से हर एक को जोड़ने। प्रत्येक को जोड़ा जाने के बाद, जांचें कि क्या यह पंक्ति पर स्थान से अधिक है, और यदि ऐसा है तो इसे हटा दें और काउंटर जोड़ें। यदि यह अभी भी पंक्ति से अधिक है, तो एक और हटाएं और काउंटर बढ़ाएं।

कुंजी एक अलग OnPreDrawListener में प्रत्येक परीक्षण करने के लिए है, इसलिए दृश्य दिखाया गया है इससे पहले कि यह सब होता है, लेकिन के बाद दृश्य अपने लेआउट और आकार की गणना पड़ा है।

9

प्रोग्राम के रूप में पाश जिसमें प्रत्येक TextView जोड़ने के बाद, शेष चौड़ाई उपलब्ध पाने के लिए एक में एक LinearLayout को TextViews जोड़ने (का उपयोग करते हुए [ScreenWidth- (जोड़ा textviews की राशि की गणना की जा सकती है चौड़ाई + [संख्या का प्रयास करें टेक्स्टव्यू * प्रत्येक के लिए मार्जिन/पैडिंग]]] *

यदि चौड़ाई एक निश्चित न्यूनतम से कम है (कहें कि आपको प्रत्येक टेक्स्टव्यू के लिए न्यूनतम 100px की आवश्यकता है) तो लूप तोड़ें और गिनती सूचक पाठ जोड़ें।

मैं नीचे दिए गए कोड के बारे में सोच सकते हैं, यह सटीक नहीं हो सकता है, लेकिन केवल आपके दिखाने के लिए क्या की

int screenWidth = getScreenWidth(); 
    int currentWidth=0; 
    int minimumWidthForAChildWithOffset = 100;//offset should include width of indicator 
    int childCount = 10; 
    int paddingForEachChild = 15; 
    for (int i = 0; i <childCount; i++) { 
     TextView label= getChildView(); 
     parent.addView(label, i); 
     currentWidth += parent.getChildAt(i).getWidth() + paddingForEachChild; 
     if(i!=childCount-1/*ignore if this is the last item*/ && screenWidth-currentWidth<=minimumWidthForAChildWithOffset){ 
      //add indicator label to layout here 
      break; 
     } 
    } 
+0

"कहें कि आपको प्रत्येक टेक्स्टव्यू के लिए न्यूनतम 100px की आवश्यकता है" ... टेक्स्टव्यू की चौड़ाई तय नहीं है। सभी ग्रंथ एक ही लंबाई के नहीं हैं। ग्रंथ एक आरईएसटी सेवा से आते हैं। तो यदि तीन ग्रंथ हैं जो 2-3 वर्ण लंबे हैं और फिर चौथा एक आता है जो 20 वर्ण लंबा है? –

2

अगर मुझे आपके जैसा वर्णन कुछ करना है, तो मैं फ्लोलाउट को फोर्क/उपclass करने और onMeasure और onLayout विधियों को अपडेट करने का प्रयास करूंगा।

यहाँ FlowLayout है: https://github.com/blazsolar/FlowLayout/blob/develop/FlowLayout/src/main/java/com/wefika/flowlayout/FlowLayout.java

1) सबसे पहले कदम onMeasure में FlowLayout की ऊंचाई सीमित करने के लिए है। इसके अलावा, यह इस तरह से कुछ करने के लिए पर्याप्त हो सकता है:

<LinearLayout android:orientation="vertical" ... > 
    <RelativeLayout ... />  
    <FlowLayout android:layout_height="0dp" android:layout_weight="1" ... />   
    <RelativeLayout ... /> 
</LinearLayout> 

2) दूसरा कदम onLayout अद्यतन करने के लिए है, इसलिए यह लाइनों और लाइन विचारों को जोड़ने जब अधिकतम ऊंचाई पर पहुंच गया है, तो आपके विचार जो की संख्या प्रदर्शित करता जोड़ने बंद हो जाता है छिपे हुए विचार

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