IOS ट्यूटोरियल टीम के सदस्य अली Hafizji, एक IOS और Android डेवलपर भारत में रह रहे एक ब्लॉग पोस्ट है.
एक बोली स्टीव नौकरियाँ ने कहा कभी नहीं :-)
इस ट्यूटोरियल Android विकास, इस साइट की पहली चढ़ाई के साथ एक मंच गैर एप्पल के लिए विकास में शुरू हो रही है की एक निरंतरता है! इसे बाहर की जाँच अगर आप पहले से ही नहीं है.
यदि आप आखिरी बार के साथ पीछा कर रहे थे, तो आप एक “नमस्ते विश्व” Android एप्लिकेशन बनाया है, यह एक डिवाइस या emulator पर काम कर रहे हैं, और फिर एक साधारण मास्टर / विस्तार QuoteReader app बुलाया है कि हमारे नायक द्वारा उद्धरण की एक सूची प्रदर्शित करता है, स्टीव नौकरियाँ .
इस ट्यूटोरियल तुम QuoteReader परियोजना के लिए कुछ प्रमुख सुधार के माध्यम से लेता है, जिस तरह से अपने साथ कुछ महत्वपूर्ण Android अवधारणाओं समझा. अंत तक, आप निम्नलिखित सीखा है हूँ:
लेआउट Android में कैसे काम करते हैं.
सबसे आम XML लेआउट विशेषताओं और उनके उपयोग करता है.
कैसे QuoteReader को संशोधित करने के लिए अनुमति बोली संपादन, के रूप में के रूप में अच्छी तरह से पूर्ण आकार छवियों.
कैसे उपयोगकर्ता प्रत्येक बोली दर करने के लिए अनुमति देने के लिए.
कैसे जोड़ सकते हैं और उद्धरण हटा दें.
प्रारंभ करना: समझौता लेआउट
पहले मैं Android के विकास के लिए एक महत्वपूर्ण अवधारणा परिचय है कि हम एक भाग में कवर नहीं किया जा रहा हूँ.
लेआउट Android स्क्रीन है कि Android उपकरणों पर आने की विविधता के लिए समाधान कर रहे हैं. ये स्क्रीन अलग पिक्सेल घनत्व, आयाम, और पहलू अनुपात हो सकता है.
हाँ, यह ठीक है – iOS डेवलपर्स यह एक बहुत आसान करने के लिए बस और iPad iPhone स्क्रीन आयामों के साथ के बारे में चिंता करने की ज़रूरत है! :]
ठेठ Android उपकरणों को भी स्क्रीन अभिविन्यास (चित्र या परिदृश्य) बदल रहा है जबकि आवेदन चल रहे हैं की अनुमति देते हैं, तो लेआउट बुनियादी सुविधाओं के लिए मक्खी पर प्रतिक्रिया करने में सक्षम होने की जरूरत है. लेआउट डेवलपर्स विचारों की शारीरिक संबंध के रूप में वे स्क्रीन पर तैयार कर रहे हैं व्यक्त करने के लिए एक रास्ता देने का इरादा कर रहे हैं.
Android में लेआउट एक पेड़ के रूप में एक एकल रूट और विचारों का एक पदानुक्रम के साथ कर रहे हैं. पिछले ट्यूटोरियल में XML लेआउट फ़ाइलों के किसी भी वापस देखो, और आप देखेंगे कि XML टैग पेड़ की जड़ के रूप में एक स्क्रीन लेआउट के साथ इस तरह के एक पदानुक्रम बनाने के लिए,. पेड़ में प्रत्येक दृश्य देखा गया यह होता है और मानना है कि यह होता है की बच्चे के माता पिता कहा जाता है.
जब लेआउट एंड्रॉयड (XML से वास्तविक स्मृति दृश्य वस्तुओं परिवर्तित कह का एक अच्छा तरीका) द्वारा फुलाया जाता है, यह दो चरणों के माध्यम से चला जाता है:
चरण उपाय: इस चरण के दौरान, Android लेआउट पेड़, ऊपर से नीचे तक और प्रत्येक दृश्य traverses ऊर्ध्वाधर ऊंचाई और क्षैतिज चौड़ाई ही अंतिम प्रदर्शन में प्रदर्शित करने की जरूरत की राशि की घोषणा की.
लेआउट चरण: इस चरण में भी है एक ऊपर से नीचे चंक्रमण, लेकिन अब प्रत्येक दृश्य आकार में अपने बच्चों के हर उपाय पास के दौरान यह द्वारा घोषित पदों.
एक बार दोनों चरणों को पूरा कर रहे हैं, विचार स्क्रीन पर तैयार कर रहे हैं.
चिंता मत करो अगर आप अभी भी थोड़ा उलझन में कैसे व्यवहार में यह काम करता है – आप जल्द ही देखेंगे! :]
आमतौर पर इस्तेमाल किया XML गुण
सभी XML विशेषताओं का सही उपयोग सीखने के लिए पहली बार में एक थोड़ा कठिन लग सकता है. यह निश्चित रूप से कुछ करने के लिए लेआउट मापदंडों के भारतीय नौसेना पोत और बहिष्कार गुरु के लिए समय लगता है. इस खंड में, मैं सबसे व्यापक रूप से इस्तेमाल किया लेआउट मानकों और उनके सही उपयोग के कुछ चर्चा करेंगे.
सबसे पहले, लेआउट गुण है कि साथ “layout_” शुरू करने के लिए एक दृश्य LayoutParams, जो देखा गया द्वारा इस्तेमाल के लिए अपने माता पिता को बता वे कैसे होना चाहिए के साथ क्या करना है … हां, बाहर रखी. :]
दूसरे शब्दों में, इन विशेषताओं लेआउट मुद्रास्फीति के उपाय चरण के दौरान देखने के आकार निर्धारित करने के लिए किया जाता है.
इन विशेषताओं के सबसे सामान्य रूप से प्रयुक्त layout_width और layout_height हैं, क्योंकि वे प्रत्येक दृश्य के आकार को परिभाषित करने के लिए उपयोग किया जाता है. इन दो विशेषताओं के लिए सबसे अधिक इस्तेमाल मान रहे हैं:
match_parent और fill_parent: ये सेट देखने के आयाम के रूप में माता पिता के रूप में बड़ा हो. हम main.xml और quote_detail.xml में यह पहले से ही इस्तेमाल किया.
wrap_content: इस बस के लिए अपनी सामग्री को फिट करने के लिए पर्याप्त आयाम सेट. हम quote_detail.xml में यह पहले से ही इस्तेमाल किया.
यह समझने के लिए सबसे आसान तरीका नेत्रहीन है. तो यहाँ fill_parent रूप layout_width सेट के साथ एक बटन के एक उदाहरण है:
और यहाँ के रूप में layout_width wrap_content सेट के साथ एक बटन के एक उदाहरण है:
अगला, layout_gravity और गुरुत्वाकर्षण विशेषताओं पर एक नज़र है. ये दोनों काफी भ्रमित शुरू हो सकता है. बस याद है कि “लेआउट” के साथ एक शुरुआत करने के लिए माता – पिता में देखने की स्थिति के साथ क्या करना है. इसलिए layout_gravity परिभाषित करता है कैसे एक दृश्य के माता पिता के दृश्य में तैनात किया जाएगा, जबकि गुरुत्वाकर्षण बस को परिभाषित करता है कैसे देखने की सामग्री के भीतर ही रखा जाएगा.
नीचे दी गई छवि layout_gravity center_horizontal करने के लिए सेट किया गया है:
इस छवि के नीचे गुरुत्वाकर्षण बाएँ निर्धारित कर दिया गया है:
अगले layout_weight है. जब आप किसी भी विचार है कि आप इस ट्यूटोरियल में बना देंगे में इस विशेषता का उपयोग नहीं कर जाएगा, तो आप इसके बारे में पता होना चाहिए. यह पैरामीटर केवल LinearLayouts के साथ प्रयोग किया जाता है और यह आप बच्चे के विचारों के महत्व को प्राथमिकता देता है.
उदाहरण के लिए, यदि आप एक ऊर्ध्वाधर LinearLayout में कई विचार हैं, तो आप को परिभाषित कर सकते हैं कैसे विचारों के प्रत्येक अतिरिक्त अंतरिक्ष ले इतना है कि पूरे स्क्रीन भर जाता है. यह वास्तव में उपयोगी है. इसका मतलब यह है कि आप प्रत्येक बच्चे के लिए निश्चित आकार को परिभाषित करने की ज़रूरत नहीं है – बजाय, Android प्रणाली आप के लिए सब कुछ कर रहे है.
इस छवि के नीचे तीन बटन एक ऊर्ध्वाधर LinearLayout में रखा है, लेकिन कोई भी एक वजन लेआउट सौंपा है:
जबकि अगले छवि में, 1, 2 और 3 के तीन बटन वजन क्रमश दिए गए:
डेटा स्रोत बदलने
इससे पहले कि आप अपने लेआउट के नए ज्ञान का उपयोग करने के लिए QuoteReader app में सुधार करने के लिए करते हैं, तो आप कुछ वास्तु परिवर्तन लिए QuoteReader के लिए बनाने की जरूरत है.
सबसे पहले, आप के लिए एक वर्ग है कि अपनी सूची में प्रत्येक और हर आइटम के डेटा शामिल बनाने की जरूरत है. अपनी वर्तमान स्थिति में, QuoteReader थंबनेल, उद्धरण और पूर्ण आकार छवियों के लिए तीन अलग अलग ArrayLists रखता है. इस दृष्टिकोण के साथ समस्या यह है कि वस्तुओं के किसी भी के बीच कोई संबंध है. यही है, अगर मैं थंबनेल ArrayList से थंबनेल निकालने, यह उद्धरण ArrayList से इसी बोली नहीं निकाल देंगे.
इसे ठीक करने के लिए, पहले अपने डेटा स्रोत को बनाए रखने के लिए एक अलग पैकेज बनाते हैं. “फ़ोल्डर पर राइट क्लिक करें और नई -> पैकेज का चयन करें. पैकेज “com.tutorial.quotereader.datasource नाम.” इस पैकेज में कक्षा डेटास्रोत खींचें, और ठीक क्लिक जब पॉपअप प्रकट होता है.
अब अपने मद के लिए एक नया वर्ग बनाने. नए पैकेज पर राइट क्लिक करें और नई -> कक्षा का चयन करें. वर्ग DataSourceItem नाम, और समाप्त क्लिक करें. इस वर्ग थंबनेल (बिटमैप), पूर्ण आकार छवि (बिटमैप), (स्ट्रिंग) बोली और है कि बोली की रेटिंग (फ्लोट मूल्य) के आयोजन के लिए जिम्मेदार होगा.
वर्ग के लिए निम्नलिखित निजी चर और getters / setters जोड़ें:
निजी बिटमैप mThumbnail;
निजी बिटमैप mHdImage;
निजी स्ट्रिंग mQuote;
निजी नाव mRating;
सार्वजनिक बिटमैप (getmThumbnail) {
mThumbnail वापसी;
}
सार्वजनिक बिटमैप (getmHdImage) {
mHdImage वापसी;
}
सार्वजनिक स्ट्रिंग (getmQuote) {
mQuote वापसी;
}
पब्लिक फ्लोट (getmRating) {
mRating वापसी;
}
सार्वजनिक शून्य setmRating (mRating फ्लोट) {
= mRating this.mRating;
}
सार्वजनिक शून्य setmHdImage बिटमैप (mHdImage) {
this.mHdImage = mHdImage;
}
सार्वजनिक शून्य setmQuote (String mQuote) {
this.mQuote = mQuote;
}
आप बिटमैप वर्ग के लिए एक लापता आयात के लिए कुछ त्रुटियों को मिल सकता है – इस संकल्प, स्रोत आयात व्यवस्थित और यह स्वचालित रूप से आवश्यक आयात जोड़ देगा. यदि आप कभी भी इस ट्यूटोरियल के बाकी हिस्सों में आयात लापता हो, तो आप इस तकनीक का उपयोग कर सकते हैं. काम, है ना?
इसके बाद, दो भवन निर्माताओं जोड़ें. नीचे दिए गए कोड काफी आत्म व्याख्यात्मक होना चाहिए:
सार्वजनिक (DataSourceItem) {
mQuote = “नई समीक्षा जोड़ा जाता है”;
}
सार्वजनिक DataSourceItem (बिटमैप थम्बनेल, बिटमैप hdImage, स्ट्रिंग बोली) {
अगर (थंबनेल == बातिल | hdImage == बातिल | | | बोली == रिक्त)
फेंक नई IllegalArgumentException ();
mThumbnail = थंबनेल;
mHdImage = hdImage;
= बोली mQuote;
2.5f = mRating;
}
अब कि आप अपने मद के लिए तैयार है, तो आप डेटास्रोत वर्ग को संशोधित करने की जरूरत है ताकि तीन ArrayLists होने के बजाय, आप बस एक है, और सरणी सूची में प्रत्येक वस्तु प्रकार DataSourceItem की है.
ओपन DataSource.java और निम्नलिखित के साथ सामग्री की जगह:
com.tutorial.quotereader.datasource पैकेज;
आयात java.util.ArrayList;
android.content.Context आयात;
android.graphics.drawable.BitmapDrawable आयात;
आयात com.razeware.QuoteReader.R;
सार्वजनिक वर्ग डेटास्रोत {
निजी प्रसंग mContext;
निजी ArrayList <DataSourceItem> mItemsData;
सार्वजनिक प्रसंग (संदर्भ) डेटास्रोत {
this.mContext = संदर्भ;
mItemsData = new ArrayList (<DataSourceItem>);
(setupItemsData);
}
सार्वजनिक ArrayList <DataSourceItem> (getmItemsData) {
mItemsData वापसी;
}
निजी शून्य (setupItemsData) {
(mItemsData.add नया
((BitmapDrawable) (mContext.getResources) getDrawable (R.drawable.steve_hd_1)) (getBitmap), mContext.getResources () (R.string.quote_1) getString));
(mItemsData.add नया
((BitmapDrawable) (mContext.getResources) getDrawable (R.drawable.steve_hd_2)) (getBitmap), mContext.getResources () (R.string.quote_2) getString));
(mItemsData.add नया
((BitmapDrawable) (mContext.getResources) getDrawable (R.drawable.steve_hd_3)) (getBitmap), mContext.getResources () (R.string.quote_3) getString));
(mItemsData.add नया
((BitmapDrawable) (mContext.getResources) getDrawable (R.drawable.steve_hd_4)) (getBitmap), mContext.getResources () (R.string.quote_4) getString));
(mItemsData.add नया
((BitmapDrawable) (mContext.getResources) getDrawable (R.drawable.steve_hd_5)) (getBitmap), mContext.getResources () (R.string.quote_5) getString));
(mItemsData.add नया
((BitmapDrawable) (mContext.getResources) getDrawable (R.drawable.steve_hd_6)) (getBitmap), mContext.getResources () (R.string.quote_6) getString));
(mItemsData.add नया
((BitmapDrawable) (mContext.getResources) getDrawable (R.drawable.steve_hd_7)) (getBitmap), mContext.getResources () (R.string.quote_7) getString));
(mItemsData.add नया
((BitmapDrawable) (mContext.getResources) getDrawable (R.drawable.steve_hd_8)) (getBitmap), mContext.getResources () (R.string.quote_8) getString));
(mItemsData.add नया
((BitmapDrawable) (mContext.getResources) getDrawable (R.drawable.steve_hd_9)) (getBitmap), mContext.getResources () (R.string.quote_9) getString));
(mItemsData.add नया
((BitmapDrawable) (mContext.getResources) getDrawable (R.drawable.apple_hd).) (GetBitmap), mContext.getResources () (R.string.quote_10) getString)).
}
सार्वजनिक int (getDataSourceLength) {
(mItemsData.size);
}
}
अब आप को बदलने के लिए डेटा मॉडल विभिन्न गतिविधियों भर में नियंत्रित किया जाता है के लिए जा रहे हैं. पहले ट्यूटोरियल में, आप प्रत्येक गतिविधि में नए डेटास्रोत वस्तुओं का निर्माण करके ऐसा किया. यह दृष्टिकोण किसी भी अब काम नहीं, क्योंकि आप डेटा को संशोधित करने के लिए जा रहे हैं और आप यह सभी गतिविधियों भर में एक ही होना चाहता हूँ. ऐसा करने के लिए, आप सिंगलटन डिजाइन पैटर्न का उपयोग करेंगे.
DataSource.java लिए निम्नलिखित जोड़ें:
निजी स्थैतिक डेटास्रोत mDataSource;
सार्वजनिक स्थैतिक डेटास्रोत getDataSourceInstance (संदर्भ संदर्भ) {
अगर (== बातिल mDataSource)
= नई डेटास्रोत mDataSource (संदर्भ);
mDataSource वापसी;
}
आगे जा रहे हैं, आप केवल इस स्थैतिक विधि का उपयोग करने के लिए डेटा स्रोत के लिए एक संदर्भ मिल जाएगा.
उद्धरण संपादन
जब यह संपादन QuoteReader में एक बोली के लिए आता है, वहाँ दो कदम हैं. पहली बोली के वास्तविक पाठ बदल रहा है. 2 पूर्ण आकार बोली के ऊपर प्रदर्शित छवि बदल रही है.
चरण 1: पाठ संपादन
और सबसे पहले, एक बोली को संपादित करने के लिए आप EditText है, जो केवल textview के एक संपादन संस्करण का उपयोग करने की आवश्यकता है. EditText, 1 खुले जोड़कर लेआउट quote_details.xml का उपयोग करें और EditText textview को बदलने के.
हम भी मापदंडों में से कुछ के लिए कुछ tweaks बना देंगे और एक LinearLayout लेआउट बदल. फ़ाइल को संशोधित तो अंतिम लेआउट इस तरह दिखता है:
<XML संस्करण = “1.0″ कूटबन्धन = “utf-8″?>
<Scrollview xmlns: android = “http://schemas.android.com/apk/res/android”
android: layout_width = “fill_parent”
android: layout_height = “fill_parent”>
<LinearLayout
android: layout_width = “fill_parent”
android: layout_height = “wrap_content”
android: अभिविन्यास = “ऊर्ध्वाधर”>
<ImageView
android: id = “@ + विस्तार / छवि”
android: layout_width = “fill_parent”
android: layout_height = “350dip”
android: layout_marginLeft / = “5dip”>
<EditText
android: id = “@ + विस्तार / बोली”
android: layout_width = “fill_parent”
android: layout_height = “wrap_content”
android: inputType = “पाठ”
android: textSize = “24dip”
/>
<LinearLayout />
<Scrollview />
ठीक है, यह बाहर का परीक्षण करने के लिए समय! पहला QuoteDetail.java के लिए कुछ परिवर्तन करना:
/ / Textview से EditText बदलें mQuote
निजी EditText mQuote;
/ / बनाने के चर mDataSource और जोड़ने के बजाय इस लाइन हटाएँ
निजी DataSourceItem mItem;
/ / एक EditText परिवर्तन mQuote के कलाकारों को
mQuote = (EditText) findViewById (R.detail.quote);
/ / इस के साथ imageView और भाव की स्थापना लाइनों बदलें
mItem = DataSource.getDataSourceInstance (यह) (getmItemsData) (MPOSITION).
mImageView.setImageBitmap (mItem.getmHdImage ());
mQuote.setText (mItem.getmQuote ());
और QuoteReaderActivity.java में निम्न परिवर्तन:
/ / QuoteAdapter निर्माता mDataSource बनाने लाइन बदलें
mDataSource = DataSource.getDataSourceInstance (mContext);
/ / बदलें थंबनेल और getView में बोली की स्थापना लाइनों
थंबनेल = (imageView) convertView.findViewById (R.list.thumb);
thumbnail.setImageBitmap (. mDataSource.getmItemsData () (स्थिति) getmThumbnail ());
बोली = convertView.findViewById (textview) (R.list.text);
quote.setText (. mDataSource.getmItemsData () (स्थिति) getmQuote ());
अब संकलन और कार्यक्रम चलाते हैं. आप देखेंगे कि जब आप विस्तार पेज दर्ज करते हैं, तो आप एक बोली के लिए पाठ दर्ज कीबोर्ड के साथ प्रस्तुत कर रहे हैं. आप जो कुछ भी आप की तरह टाइप कर सकते हैं, लेकिन अगर आप QuoteReader गतिविधि (आपके डिवाइस पर वापस बटन दोहन करके) पर वापस जाएँ, आप अपने परिवर्तनों को नोटिस किया था प्रभाव वास्तव में नहीं ले जाऊँगा.
परिवर्तन को स्थायी बनाने के लिए, आप डेटा स्रोत में प्रविष्टि को संशोधित करने की जरूरत है. ऐसा करने के लिए आप एक श्रोता बनाने के लिए एक कॉलबैक के रूप में जल्द ही के रूप में उपयोगकर्ता पाठ संपादन समाप्त हो गया है देने की जरूरत है. एक बार जब आप जानते हैं कि उपयोगकर्ता संपादन समाप्त हो गया है, तो आप डेटा स्रोत के संबंधित मद में बोली बदल सकते हैं.
QuoteDetail.java onCreate विधि के अंत में निम्नलिखित लाइनों जोड़ें:
mQuote.addTextChangedListener (नया (TextWatcher) {
@ ओवरराइड
सार्वजनिक शून्य onTextChanged (CharSequence s, int शुरू, int पहले, int गिनती) {
mItem.setmQuote ((s.toString));
}
@ ओवरराइड
सार्वजनिक शून्य beforeTextChanged (CharSequence एस, int शुरू, int गिनती,
बाद int) {
}
@ ओवरराइड
सार्वजनिक afterTextChanged शून्य (संपादन ओं) {
}
});
सूचना EditText के लिए TextChangedListener के अलावा. यह श्रोता तीन callbacks देता है, लेकिन सबसे महत्वपूर्ण onTextChanged है, जो जैसे ही उपयोगकर्ता के रूप में बोली संपादन खत्म निकाल दिया है.
निर्माण और परियोजना को चलाने के. एक बोली का संपादन करने का प्रयास करें. अब तुम नोटिस हूँ कि उद्धरण सूची अद्यतन नहीं है. यही है, आप विस्तार पृष्ठ से एक बोली को संपादित करने के लिए, कर सकते हैं और संपादन वहाँ संरक्षित किया जाएगा, लेकिन जब आप उद्धरण की सूची पर लौटने आप केवल मूल, अपरिवर्तित उद्धरण के देखेंगे.
समस्या यह है कि सूची अनुकूलक का एहसास नहीं है डेटा स्रोत बदल गया है. तो आप क्या करने की जरूरत है नई डेटा सेट और सूची दृश्य ताजा हो जाएगा के बारे में सूची एडाप्टर बताओ.
इस ऐड करने के लिए, निम्नलिखित की तरह QuoteReaderActivity.java में onResume विधि को लागू करने के लिए:
@ ओवरराइड
संरक्षित शून्य (onResume) {
(super.onResume);
अगर (mListView = बातिल) {
QuoteAdapter अनुकूलक = (QuoteAdapter) (mListView.getAdapter);
(adapter.notifyDataSetChanged);
}
}
निर्माण और परियोजना को चलाने के. अब सब कुछ सही ढंग से काम करना चाहिए!
चरण 2: पूर्ण आकार संपादन छवियों
विवरण पृष्ठ में उपयोगकर्ता के लिए दिखाई छवि को संपादित करने के लिए, आप उपयोगकर्ता गैलरी app करने के लिए नेविगेट करने के लिए अनुमति देने के लिए जा रहे हैं, एक छवि का चयन करें और दिखाया एक के स्थान में है कि छवि का उपयोग करें. यही कारण है कि आप DataSourceItem वर्ग में के बजाय बिटमैप संसाधन आईडी का उपयोग कर रहे हैं.
पहले एक क्लिक श्रोता सेट imageview पर क्लिक करें घटनाओं के लिए सुनने के.
QuoteDetail.java में निम्न परिवर्तन करें:
निम्नलिखित लाइनों जोड़ें onCreate विधि QuoteDetail वर्ग:
/ / नए निजी निरंतर चर जोड़ें
निजी स्थैतिक अंतिम int SELECT_PHOTO = 100;
/ / OnCreate के अंत में जोड़ें
mImageView.setOnClickListener (नया (View.OnClickListener) {
@ ओवरराइड
सार्वजनिक शून्य onClick (मानचित्र v) {
आशय photoPickerIntent = new Intent (Intent.ACTION_PICK);
photoPickerIntent.setType (“छवि / *”);
startActivityForResult (photoPickerIntent, SELECT_PHOTO);
}
});
गैलरी एप्लिकेशन लॉन्च करें, आप पहली बार बाहर की एक मंशा भेज. इरादे बनाने के “ACTION_PICK” उपयोग पर ध्यान दें. इस गैलरी app ऐसी है कि यह उपयोगकर्ता एक छवि लेने के लिए अनुमति देगा का शुभारंभ करेंगे. इस मामले में सिर्फ एक छवि: आशय का प्रकार भी “छवि / *” डेटा के प्रकार को निर्दिष्ट करने के लिए लौटने के लिए सेट कर दिया जाता है.
नोट: यदि उपयोगकर्ता किसी अन्य अनुप्रयोग कि ACTION_PICK के इरादे को संभालने और एक छवि लौट सकते हैं, Android एक चयन मेनू प्रदर्शित कि तो उपयोगकर्ता का चयन से जो app का उपयोग करने के लिए कर सकते हैं.
एक onActivityResult बुलाया समारोह स्वचालित रूप से कहा जाता है जब उपयोगकर्ता एक छवि उठाता है. आप कि विधि ओवरराइड उपयोगकर्ता छवि प्रदर्शित करने के लिए उठाया पाने की जरूरत है.
तो QuoteDetail.java के लिए निम्नलिखित लाइनें जोड़ने:
@ ओवरराइड
शून्य onActivityResult (int requestCode, int resultCode आशय डेटा) संरक्षित {
(requestCode, resultCode, डेटा) super.onActivityResult;
स्विच (requestCode) {
मामला SELECT_PHOTO:
अगर (resultCode == RESULT_OK) {
उड़ी selectedImage = (data.getData);
try {
InputStream imageStream getContentResolver = () openInputStream (selectedImage).
बिटमैप yourSelectedImage = BitmapFactory.decodeStream (imageStream);
mItem.setmHdImage (yourSelectedImage);
mImageView.setImageBitmap (yourSelectedImage);
} पकड़ (FileNotFoundException e) {
(e.printStackTrace);
}
}
}
}
आशय कि onActivityResult को पारित कर दिया है चयनित छवि के यूआरआइ प्राप्त करने के लिए इस्तेमाल किया जा सकता है. एक यूआरआइ एक अद्वितीय ID कि एक संसाधन की पहचान करने के लिए इस्तेमाल किया जा सकता है. कोड यूआरआइ ऊपर का उपयोग करता है छवि के बिटमैप प्राप्त है, और उस बिटमैप अपनी imageview के स्रोत के रूप में सेट कर दिया जाता है. एक ही बिटमैप भी पूर्ण आकार डेटास्रोत में बोली के लिए इस्तेमाल किया जा छवि के रूप में सेट कर दिया जाता है.
बनाने के लिए और फिर से चलाने के लिए समय! अब आप दोनों पाठ और प्रत्येक बोली की छवि को संपादित करने के लिए सक्षम होना चाहिए.
रेटिंग बार्स जोड़ना
Android एक RatingBar बुलाया दृश्य है, एसडीके द्वारा प्रदान की गई है. अब आप इसे का लाभ लेने के लिए जा रहे हैं.
फ़ाइल quote_detail.xml खोलें और दृश्य जोड़ने RatingBar. numStars पैरामीटर रेटिंग बार द्वारा इस्तेमाल सितारों की कुल संख्या को इंगित करता है. यह 5 से सेट करें.
लेआउट फाइल की सामग्री को नीचे दिखाने.
<XML संस्करण = “1.0″ कूटबन्धन = “utf-8″?>
<Scrollview
xmlns: android = “http://schemas.android.com/apk/res/android”
android: layout_width = “fill_parent”
android: layout_height = “fill_parent”>
<LinearLayout
android: layout_width = “fill_parent”
android: layout_height = “wrap_content”
android: अभिविन्यास = “ऊर्ध्वाधर”>
<ImageView
android: id = “@ + विस्तार / छवि”
android: layout_width = “fill_parent”
android: layout_height = “350dip”
android: layout_marginLeft / = “5dip”>
<RatingBar
android: id = “@ + id / rating_bar”
android: layout_width = “wrap_content”
android: layout_height = “wrap_content”
android: numStars / = “5″>
<EditText
android: id = “@ + विस्तार / बोली”
android: layout_width = “fill_parent”
android: layout_height = “wrap_content”
android: inputType = “पाठ”
android: textSize / = “24dip”>
<LinearLayout />
<Scrollview />
फिर QuoteDetail.java खुला और निम्न परिवर्तन करें:
/ / इस दृश्य के लिए एक नया चर बनाएँ
निजी RatingBar mRatingBar;
/ / OnCreate विधि के अंत के लिए निम्न पंक्तियाँ जोड़ें:
mRatingBar = (RatingBar) findViewById (R.id.rating_bar);
mRatingBar.setRating (() mItem.getmRating);
mRatingBar.setOnRatingBarChangeListener (नया (RatingBar.OnRatingBarChangeListener) {
@ ओवरराइड
सार्वजनिक onRatingChanged शून्य (RatingBar ratingBar, नाव रेटिंग
बूलियन) fromUser {
/ / दर्ज़ा वापस डेटा स्रोत लिखने:]
mItem.setmRating (रेटिंग);
}
});
यहाँ आप आईडी XML फ़ाइल में प्रारंभिक रेटिंग सेट, एक घटना श्रोता सेट जब रेटिंग परिवर्तन का पता लगाने के द्वारा दृश्य मिल जाए, और दृश्य तदनुसार अद्यतन.
निर्माण और चलाने. अब आप प्रत्येक बोली के लिए एक भयानक दिखने रेटिंग बार होना चाहिए!
नया उद्धरण जोड़ना
एक नई बोली जोड़ने के लिए, आप पहली बार के लिए एक विकल्प मेनू बनाने की जरूरत है. एक विकल्प मेनू है उपयोगकर्ता Android में मेनू बटन दबाने के बाद क्या देखता है. सभी बुनियादी गतिविधि कार्यों और नेविगेशन आइटम्स एक विकल्प मेनू में रखा जाना चाहिए.
जब Android प्रणाली पहली बार के लिए एक विकल्प मेनू बनाता है, यह अपनी गतिविधि onCreateOptionsMenu विधि बताते हैं. तो है कि तुम क्या करने के लिए अपने मेनू बनाने को ओवरराइड करने के लिए जा रहे हैं.
QuoteReader गतिविधि खोलें और निम्न परिवर्तन करें:
/ / QuoteReaderActivity के शीर्ष में जोड़ें
निजी स्थैतिक int = 1 CREATE_QUOTE_ID;
/ / QuoteReaderActivity के लिए नई विधि जोड़ें
@ ओवरराइड
सार्वजनिक बुलियन onCreateOptionsMenu (मेनू) {
menu.add (Menu.NONE, CREATE_QUOTE_ID, Menu.NONE, “नई बोली बनाएँ”);
वापसी सच;
}
विधि एक मेनू वस्तु देता है. सूचना है कि आप मेनू वस्तु के लिए एक प्रविष्टि जोड़ रहे हैं. ऐड विधि निम्न तर्क लेता है:
ग्रुप आईडी: समूह पहचानकर्ता है कि इस मद का हिस्सा होना चाहिए. इस प्रयोग के लिए विकल्पों में से एक नंबर एक साथ समूहीकृत. चूंकि आप एक ही है, कोई नहीं का उपयोग करें.
Itemid: अद्वितीय आईडी मेनू में प्रत्येक मद के लिए दिया. आप मान 1 के साथ एक स्थैतिक int चर का उपयोग कर रहे हैं.
आदेश: आइटम के लिए आदेश.
शीर्षक: स्ट्रिंग मेनू आइटम के शीर्षक को दिखाने के लिए इस्तेमाल किया.
निर्माण और चलाने. अब आप एक विकल्प मेनू देखने के लिए जब आप मेनू बटन दबाएँ चाहिए.
अब है कि आप अपने विकल्पों मेनू मिल गया है, तो आप एक घटना है जब उपयोगकर्ता “नया भाव बनाएँ” मेनू मद नल की जरूरत है.
Android प्रणाली onOptionsItemSelected बुलाया कॉलबैक, प्रयोग किया जाता है जब एक मेनू मद टेप है शामिल हैं. यही कारण है कि क्या आप का उपयोग हो जाएगा.
QuoteReader गतिविधि के लिए निम्नलिखित लाइनों जोड़ें:
@ ओवरराइड
सार्वजनिक बुलियन onOptionsItemSelected (MENUITEM आइटम) {
अगर (item.getItemId () CREATE_QUOTE_ID ==) {
/ / डेटा सेट में एक प्रविष्टि
/ / कॉल और डेटा बदल सेट
डेटास्रोत डेटास्रोत = DataSource.getDataSourceInstance (यह);
(dataSource.getmItemsData) (नया (DataSourceItem));
QuoteAdapter अनुकूलक = (QuoteAdapter) (mListView.getAdapter);
(adapter.notifyDataSetChanged);
वापसी सच;
}
super.onOptionsItemSelected वापसी (आइटम);
}
कोड अगर आप बनाया मेनू आइटम उपयोग किया गया है की जाँच करता है, और अगर ऐसा है, तो एक नया भाव बनाता है. एक नई बोली जोड़ने के लिए, आप केवल अपने डेटा स्रोत में एक नई प्रविष्टि बनाने और अनुकूलक कि डेटा सेट बदल गया है बताने की जरूरत है.
बनाएँ और इस परियोजना को चलाने के लिए, और देखने के लिए कि जब आप एक नई बोली बनाने के लिए, एक नई प्रविष्टि डिफ़ॉल्ट मानों के साथ सूची में बनाया है. नोट आप सूची के नीचे नीचे स्क्रॉल नई प्रविष्टियों को देखने के लिए होगा.
हटाया जा रहा है उद्धरण
एक बोली को हटाने के लिए एक संदर्भ मेनू का उपयोग करने के लिए जा रहे हैं. एक संदर्भ मेनू के बारे में सोचो मेनू के रूप में आप देख जब आप किसी भी ऑपरेटिंग सिस्टम पर एक आइटम पर राइट क्लिक करें. मेनू आप देख विकल्प कि बहुत कि एक आइटम के लिए विशिष्ट हैं कि एक संदर्भ मेनू है.
इस मामले में, अपने QuoteReader एक संदर्भ मेनू दिखाई देगा जब उद्धरण सूची में एक विशेष आइटम पर प्रेस के लंबे उपयोगकर्ता. लागू करने के लिए पहला कदम का मानना है कि संदर्भ मेनू दिखाई देगा दर्ज की है. ऐसा करने के लिए, QuoteReader गतिविधि के onCreate विधि कोड की निम्न पंक्ति जोड़ें.
registerForContextMenu (mListView);
अब जब कि अपनी सूची में पंजीकृत है, उपयोगकर्ता सूची में एक आइटम पर लंबे समय प्रेस, जब सिस्टम एक onCreateContextMenu बुलाया कॉलबैक दे देंगे. अब आपको लगता है कि विधि ओवरराइड और कोड जोड़ने के लिए मेनू बनाने.
@ ओवरराइड
सार्वजनिक शून्य onCreateContextMenu (ContextMenu मेनू, दृश्य v
ContextMenuInfo) menuInfo {
(मेनू, v, menuInfo) super.onCreateContextMenu;
menu.setHeaderTitle ((getResources) (R.string.context_menu_title) getString);
}
आपको कोई त्रुटि मिलती क्योंकि हम context_menu_title लिए स्ट्रिंग नहीं जोड़ा है, तो अपने को छोड़कर मान strings.xml फ़ाइल इस जोड़ें:
<string name=”context_menu_title”> मेनू <स्ट्रिंग />
इस समय, जोड़ पद्धति का उपयोग करके मेनू बनाने के बजाय, आप XML का उपयोग करेंगे. तो जोड़कर / लेआउट निर्देशिका में एक नई XML फ़ाइल बनाने और इसे context_menu.xml नाम. यहाँ है कैसे फ़ाइल दिखना चाहिए:
<XML संस्करण = “1.0″ कूटबन्धन = “
हिन्दी
简体中文
English
Français
日本語
Русский
Español
العربية
Magyar
Indonesia
한국어
polski
Português
Română
Türkçe 





