2012-04-04 17 views
13

मैं ईबुक रीडर प्रकार एंड्रॉइड एप्लिकेशन विकसित करने की कोशिश कर रहा हूं। मुझे उपलब्ध स्क्रीन स्पेस के आधार पर फ्लाई पर पृष्ठों में लंबे एचटीएमएल स्ट्रिंग (रन-टाइम पर सर्वर द्वारा भेजा गया) विभाजित करने की आवश्यकता है। एचटीएमएल सामग्री एक लेख है जिसमें पाठ, छवियां, वीडियो इत्यादि हो सकते हैं। मैं HTML प्रदर्शित करने के लिए वेबव्यू का उपयोग कर रहा हूं।कई पृष्ठों में एचटीएमएल स्ट्रिंग को विभाजित करें

क्या कोई मुझे दिशा प्रदान कर सकता है कि यह कैसे प्राप्त किया जा सकता है।

अग्रिम धन्यवाद।

+0

क्या आप साझा कर सकते हैं कि आपने इसे कैसे हल किया? धन्यवाद। – Ravi

उत्तर

0

आपको HTML को पार्स करना होगा, कुछ लाइब्रेरी का उपयोग करना होगा जहां आप जावास्क्रिप्ट में डीओएम तक पहुंच सकते हैं। फिर आप पार्स की गई सामग्री के लिए एक कस्टम लेआउट बना सकते हैं। क्या WebView जावास्क्रिप्ट का समर्थन करता है? यह कोशिश करने के लिए एक अच्छी शुरुआत होगी।

स्पष्ट रूप से आप HTML फ़ाइल के मनमानी स्थानों पर विभाजित नहीं हो सकते हैं, आपको HTML-टैग पर विचार करना होगा। डीओएम को संशोधित करने या एचटीएमएल को विभाजित करने के बाद आप सामग्री को कस्टम तरीके से प्रदर्शित करने के लिए एक कस्टम सीएसएस फ़ाइल प्रदान कर सकते हैं और अपनी लाइब्रेरी या जावास्क्रिप्ट का उपयोग करके कुछ पेजिनेशन जोड़ सकते हैं।

<span style="display:none"></span> का उपयोग करके आप किसी वेबसाइट में सामग्री को छिपाने में मदद कर सकते हैं। तो आपको भौतिक रूप से विभाजित करने की आवश्यकता नहीं है (वैसे भी पेज लोड करने के बाद यह स्मृति में है)।

आशा है कि थोड़ा सा मदद मिलेगी। आपको यहां एक पूर्ण समाधान नहीं मिलेगा, लेकिन शायद आपको कुछ विचार मिलेंगे। यदि आपको और अधिक विशिष्ट समस्याएं मिलती हैं तो अधिक विशिष्ट प्रश्न पूछना आसान होगा।

+0

आपके उत्तर के लिए धन्यवाद। जेरिको एचटीएमएल पार्सर के साथ मैंने HTML को पार्स किया है और टेक्स्ट सामग्री और छवियों को निकाला है और फिर मैंने शीर्ष पर छविदृश्य के साथ एक कस्टम लेआउट सेट किया है और इसके नीचे टेक्स्टव्यू है। अगर कोई छवि है तो मैं इसे छविदृश्य में सेट कर रहा हूं, अगर मेरा टेक्स्टव्यू स्क्रीन फिट नहीं करता है। – Harshita

+0

textview.getPaint()। MeasureText (txt) के साथ मुझे पाठ की चौड़ाई प्रदर्शित करने के लिए मिल रहा है। हम स्क्रीन की फिट करने वाले वर्णों या पाठ की संख्या की गणना कैसे कर सकते हैं। – Harshita

8

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

CSS3 कॉलम फ़ंक्शंस का उपयोग करना बेहतर विचार है। असल में, अपनी सामग्री को एक निश्चित चौड़ाई और ऊंचाई कॉलम के भीतर प्रस्तुत करने के लिए प्राप्त करें। यह आपका पृष्ठ बन जाता है। फिर पृष्ठों के बीच स्थानांतरित करने के लिए अपनी सामग्री स्थिति को बाएं स्थानांतरित करें, और इसे एक कंटेनर में लपेटें जो अतिप्रवाह तत्वों को छुपाएगा।

हमारे एचटीएमएल मूल रूप से हो जाएगा:

<body> 
    <div id="container"> 
     <div id="content"> 

      CONTENT GOES HERE 

      <span id="endMarker"></span> 
     </div> 
    </div> 
    <div> 
     <button id="previous">Previous</button> 
     <span id="page">Page N of M</span> 
     <button id="next">Next</button> 
    </div> 
</body> 

हमारी बुनियादी सीएसएस है:

#container { 
    width: 240px; 
    overflow: hidden; 
    background-color: yellow; 
} 
#content { 
    position: relative; 
    height: 30em; 

    -moz-column-width: 240px; 
    -webkit-column-width: 240px; 
    column-width: 240px; 

    -moz-column-gap: 10px; 
    -webkit-column-gap: 10px; 
    column-gap: 10px; 
} 

अब हम के गुणकों में पृष्ठों के बीच स्विच करने के लिए, #content के लिए left सीएसएस गुण सेट होगा - 250px।

हमें केवल यह पता लगाना है कि हमारी सामग्री कितनी कॉलम लेती है, और हमें पेजिंग मिल गई है। How to get css3 multi-column count in Javascript एक संकेत देता है: हम इसे #endMarker की बाईं ओर से ढूंढने जा रहे हैं।

मोबी डिक के पहले अध्याय के साथ, एक कामकाजी उदाहरण http://lateral.co.za/pages.html है। यह क्रोम और एंड्रॉइड पर काम करता है, लेकिन फ़ायरफ़ॉक्स में नहीं - मुझे लगता है कि सीएसएस कॉलम कार्यान्वयन में मतभेदों के कारण। चूंकि हम यहां एंड्रॉइड में दिलचस्पी रखते हैं, इसलिए कोड अच्छा है।

महत्वपूर्ण हिस्से हैं:

  1. सीएसएस सेटिंग्स के रूप में ऊपर।
  2. सामग्री (लेकिन #content div के अंदर) के बाद एक <span id="endMarker"></span> के अलावा
  3. एक #previous और #next बटन के अलावा, और एक #page अवधि, #container बाहर सब।
  4. यह जावास्क्रिप्ट jQuery लोड के बाद:

    var _column = 0; 
    var _columnCount = 0; 
    var _columnWidth = 240; 
    var _columnGap = 10; 
    $(function() { 
        _columnCount = Math.floor($('#endMarker').position().left/(_columnWidth + _columnGap)); 
    
        setColumn = function(i) { 
         _column = i; 
         document.getElementById('content').style.left = -1 * _column * (_columnWidth + _columnGap); 
         $('#page').html('Page ' + (_column+1) + ' of ' + (_columnCount+1)); 
        } 
        $('#next').click(function() { 
         if (_column==_columnCount) return; 
         setColumn(_column+1); 
        }); 
        $('#previous').click(function() { 
         if (0==_column) return; 
         setColumn(_column-1); 
        }); 
        setColumn(0); 
    }); 
    

यह है कि।

काम के लिए जगह है। कोई भी कॉलम गणना की उस संख्या के बारे में सोचना चाह सकता है, मैंने इसे संदर्भित एसओ पोस्ट से चूसा है, लेकिन वास्तव में इसे नहीं सोचा है ... कंटेनर की चौड़ाई सामग्री की कॉलम चौड़ाई को प्रभावित करती है, जो कि पूरी तरह से मुझे समझ में नहीं आता है।

लेकिन कम से कम सबकुछ कम से कम क्रोम और एंड्रॉइड में कोई HTML पार्सिंग और अपना लेआउट करने के बिना काम कर रहा है।

+0

यह वास्तव में अच्छा है, लेकिन मैं खिड़की भरने के लिए चौड़ाई और ऊंचाई कैसे सेट कर सकता हूं? 'चौड़ाई: $ (विंडो) .width();' इसके बजाय 'चौड़ाई: 240px;' और अन्य कॉलम चौड़ाई काम नहीं किया। – mehdok

+0

कंटेनर विंडो को भरने के लिए यह पर्याप्त होना चाहिए। या 'चौड़ाई: 100%;' या 'चौड़ाई: 100vw;' – craigmj

+1

ठीक है, लेकिन '-मोज़-कॉलम-चौड़ाई के बारे में क्या: 240px; -वेबकिट-कॉलम-चौड़ाई: 240 पीएक्स; कॉलम-चौड़ाई: 240 पीएक्स; 'अगर मैं उन्हें दिखाया गया पहला कॉलम केवल 100% पर सेट करता है। 'ऊंचाई 'के बारे में क्या, मैं दोनों' ऊंचाई 'और' चौड़ाई 'भरना चाहता हूं – mehdok

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