Tuesday 15 January 2013

android - Size of an AlertDialog with an ImageView is too large -


संदर्भ

मुझे एक वर्ग आकार वाले एक अलर्ट डाइलॉग करना है छवि। मेरी छवियां 800x800 पिक्सल के आकार के हैं, जो कि डिवाइस स्क्रीन (800x480) से अधिक है। इमेज स्केल स्वचालित रूप से AlertDialog के आकार के लिए। हालांकि, डायलॉग स्वयं बहुत बड़ा हो जाता है: यह ऐप की पूर्ण ऊंचाई है

समस्या

मैं चाहता हूं कि संवाद केवल छवि का स्थान (प्लस संवाद बटन) पर कब्जा करे। ऐसा क्यों नहीं होता? मैंने सोचा कि वार्ताएं मानक को WRAP_CONTENT पर सेट की गई हैं।

कोड:

  ImageView photo = new ImageView (getApplicationContext ()); Photo.setImageResource (R.drawable.imageof800x800pixels) AlertDialog.Builder बिल्डर = नया AlertDialog.Builder (HangboardActivity.This)। //setMessage(R.string.nextgrip)। // यह काफी बदसूरत सेट है PositiveButton ("ठीक है", नया DialogInterface.OnClickListener () {@Override सार्वजनिक शून्य पर क्लिक करें (DialogInterface संवाद, int जो) {dialog.dismiss ();}})। setview (तस्वीर); अंतिम अलर्ट डीियलोग चेतावनी = बिल्डर.क्रेत (); alert.show ();  

संपादित कोड :

<पूर्व> छविदृश्य फ़ोटो = ढूंढेंफ़ोटोफिक्स (); इंट चौड़ाई पीएक्स = (इंट) टाइप किया गया वैल्यू.एप्ली डिमेंशन (टाइप किया गया वेल्यू। कॉमप्लेक्स_यूएनईडीडीआईपी, 200, रिसेसरस ()। GetDisplayMetrics ()); Int heightPX = (int) टाइप किया गया। मूल्य। एप्लिकेशन डेलमैन (टाइप किया गया वेल्यू। कॉमप्लेक्स_यूएनआईडीडीपी, 200, गेट रिज़ोसिएशन ()। GetDisplayMetrics ()); LinearLayout.LayoutParams लेआउटपरम = नया LinearLayout.LayoutParam (widthPX, heightPX); photo.setLayoutParams (layoutParams); AlertDialog.Builder बिल्डर = नया AlertDialog.Builder (HangboardActivity.This)। setMessage (R.string.nextgrip)। // यह काफी बदसूरत सेट है PositiveButton ("ठीक है", नया DialogInterface.OnClickListener () {@Override सार्वजनिक शून्य पर क्लिक करें (DialogInterface संवाद, int जो) {dialog.dismiss ();}})। setview (तस्वीर); अंतिम अलर्ट डीियलोग चेतावनी = बिल्डर.क्रेत (); alert.show ();

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

  LinearLayout layout = new LinearLayout (यह ); LinearLayout.LayoutParams लेआउटपरमएल = नई लाइनरलेआउट। लेआउटपाराम (देखेंसमूह। लेआउटपारम्स। WRAP_CONTENT, देखेंसमूह। लेआउटपारम्स। WRAP_CONTENT); layout.setLayoutParams (layoutParamsL); layout.setGravity (Gravity.CENTER); इंट चौड़ाई पीएक्स = (इंट) टाइप किया गया वैल्यू.एप्ली डिमेंशन (टाइप किया गया वेल्यू। कॉमप्लेक्स_यूएनआईडीडीपी, 400, रिसेसरस ()। GetDisplayMetrics ()); इंटी इक्विटी पीएक्स = (इंट) टाइप किया गया वैल्यू.एप्ली डिमेंशन (टाइप्ड वैल्यू। कॉम्पलेक्स_यूआईआईडीडीपी, 400, गोर रिसोर्स ()। GetDisplayMetrics ()); LinearLayout.LayoutParams लेआउटपरम = नया LinearLayout.LayoutParam (widthPX, heightPX); imageView.setLayoutParams (layoutParams); layout.addView (तस्वीर);  

मैं लेआउट का प्रयोग करने के खिलाफ सलाह देता हूं क्योंकि आप एक एक्सएमएल लेआउट कर सकते हैं जिसमें एक छवि विज़ुअल है जिसका लेआउट_विड्थ और लेआउट_यह ऊपर की तरह डीपी में तय किया गया है और ऐसा करने से सटीक व्यवहार होता है यह programatically तरह ऊपर उल्लेख किया। मुझे लगता है कि XML लेआउट एक अच्छा अभ्यास है क्योंकि आपके पास एक ही जगह में अपने सभी लेआउट होंगे और यह अधिक पठनीय होगा और अलग-अलग स्क्रीन रिज़ॉल्यूशन (एमडीपीआई, एचडीपीआई, एक्सएचडीपीआई) और विभिन्न डिवाइस कॉन्फ़िगरेशन (चित्र, परिदृश्य) के लिए आपके पास अलग-अलग लेआउट भी हो सकते हैं। और कई फायदे


No comments:

Post a Comment