ImageView चौड़ाई और ऊंचाई प्रोग्रामिक रूप से सेट करें?


643

मैं ImageViewप्रोग्राम की चौड़ाई और ऊंचाई कैसे निर्धारित कर सकता हूं ?


4
अजीब लगता है, यह जानकारी खोजने के लिए काफी कठिन है। प्रश्न अधिक उत्थान के योग्य है।
फुनेहे

14
किसी अन्य प्लेटफ़ॉर्म से आने वाले किसी भी व्यक्ति के लिए फुटनोट। "फिट करने के लिए आकार और आकृति" विकल्प Android में खूबसूरती से नियंत्रित किया जाता है; लेकिन इसे खोजना मुश्किल है। आप आम तौर पर चौड़ाई मिलान पैरेंट, हाइट रैप कंटेंट, एडजस्ट व्यूबाउंड्स को चालू करना चाहते हैं , पैमाने पर फिटकटर और क्रॉपटाउडिंग झूठी । तो यह स्वचालित है। मैं वास्तव में आशा करता हूं कि यह किसी की मदद करे!
फेटी

जवाबों:


1099

यह बहुत देर हो सकती है लेकिन अन्य लोगों के लिए जो समान समस्या है, ImageView की ऊंचाई निर्धारित करने के लिए:

imageView.getLayoutParams().height = 20;

उम्मीद है की यह मदद करेगा।

जरूरी। यदि आप लेआउट को 'पहले से निर्धारित' कर चुके हैं, तो ऊंचाई निर्धारित कर रहे हैं, सुनिश्चित करें कि आप भी कॉल करें:

imageView.requestLayout();

102
यदि आप लेआउट निर्धारित करने के बाद ऊँचाई निर्धारित कर रहे हैं, तो पहले से ही निर्धारित कर लें कि आप image_view.requestLayout ()
Rhys Davis

9
क्या होगा अगर मुझे wra_content की आवश्यकता है?
फ्रांसिस्को कोरालेस मोरालेस 20

8
उठो क्योंकि एक दिन तुम मेरे मालिक थे और मैं अब भी तुमसे हकीम सीख रहा हूँ :)
सामी एलाटमावी

9
@FranciscoCorralesMorales इसे wra_content के लिए उपयोग करते हैं image_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT.. यदि दृश्य अभिभावक को LinearLayoutइसके RelativeLayoutसाथ बदल दिया जाता है
Sami Eltamawy

39
तो, यूनिट कैसे निर्दिष्ट करें ? कैसे कहें कि यह डीपी है , सपा नहीं है , आदि
सईद नेमाटी

231

यदि आपकी छवि दृश्य गतिशील है, तो getLayout युक्त उत्तर शून्य-अपवाद के साथ विफल हो जाएगा।

उस मामले में सही तरीका है:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
iv.setLayoutParams(layoutParams);

7
अगर मैंने वह कोड डाला तो मेरी छवि गायब हो गई। क्यों? ImageView imgLogo = new ImageView (यह); imgLogo.setImageDrawable (लोगो); LinearLayout.LayoutParams LayoutParams = new LinearLayout.LayoutParams (32,32); imgLogo.setLayoutParams (layoutParams); row.addView (imgLogo);
मुस्तफा गुवेन

3
इस उत्तर के लिए धन्यवाद, मुझे सही रास्ते पर लाएँ। जोड़े गए नोट के रूप में, रैखिकयराउट को छवि के मूल दृश्य प्रकार पर सेट किया जाना चाहिए। उदाहरण के लिए, यदि आपका चित्र दृश्य किसी गैलरी में है, तो आपको LinearLayout के बजाय गैलरी लेआउट मापदंडों का उपयोग करना चाहिए या आपके पास कास्टिंग आयन होंगे।
प्रोफेक्सोर्गेक

3
@ मुस्तफा गुवेन मुझे आपके समान ही समस्या थी, जहां मेरा ImageViewगायब होना। ट्रिक को लेआउट पार्ट (यानी, <this_part_here>.LayoutParams) को वैसा ही बनाना है जैसा कि माता-पिता का ImageViewहै। तो, उदाहरण के लिए, यदि आप अपने दिए हैं ImageViewएक के भीतर TableRowएक के भीतर TableLayout, आप इसे के रूप में होना चाहिए TableRow.LayoutParams
user2323030

उपयोगकर्ता ($ some_number) पर विस्तृत करने के लिए -> आपको अभिभावक के अनुसार लेआउटपार्म्स बनाने और उन्हें बच्चे पर सेट करने की आवश्यकता है (छवि दृश्य), यह भी अनुरोध करें () लेखन के समय आवश्यक नहीं लगता है
बांस

lol आप नए params बनाते हैं, खराब उत्तर, आप बस वर्तमान प्राप्त कर सकते हैं, मेरा मतलब है कि यदि आप इसे करते हैं (नए बनाए) तो आपको xml की भी आवश्यकता नहीं है, तो प्रोग्रामेटिक रूप से छवि जोड़ें / भी जोड़ें ...
user924

52

अपना काम करने का यह सरल तरीका:

setContentView(R.id.main);    
ImageView iv = (ImageView) findViewById(R.id.left);
int width = 60;
int height = 60;
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height);
iv.setLayoutParams(parms);

और दूसरा तरीका अगर आप ऊंचाई और चौड़ाई में स्क्रीन का आकार देना चाहते हैं तो नीचे दिए गए कोड का उपयोग करें:

setContentView(R.id.main);    
Display display = getWindowManager().getDefaultDisplay();
ImageView iv = (LinearLayout) findViewById(R.id.left);
int width = display.getWidth(); // ((display.getWidth()*20)/100)
int height = display.getHeight();// ((display.getHeight()*30)/100)
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height);
iv.setLayoutParams(parms);

आशा है कि आप का पूरा उपयोग करें।


यह मेरे लिए ठीक काम है !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! प्रदर्शन प्रदर्शन = getWindowManager ()। GetDefaultDisplay (); ImageView iv = (रैखिकयरआउट) findViewById (R.id.left); int चौड़ाई = display.getWidth (); // ((display.getWidth () * 20) / 100) int height = display.getHeight (); // ((display.getHeight () * 30) / 100) LinearLayout.LayoutParth parms = नया LinearLayout.LayoutParams (चौड़ाई) ,ऊंचाई); iv.setLayoutParams (parms);
सेलिम रजा

intयदि वे कहीं और फिर से उपयोग नहीं किए जाएंगे तो लोग चर घोषित क्यों करते हैं? अनावश्यक लगता है, लेकिन मुझे इसके बारे में ज्यादा जानकारी नहीं है।
n00dles

1
सिर्फ बेहतर समझ के लिए @ n00dles ,,, और कुछ नहीं
Duggu

36

मैंने इसके साथ pixelऔर खेला है dp

private int dimensionInPixel = 200;

पिक्सेल द्वारा कैसे सेट करें :

view.getLayoutParams().height = dimensionInPixel;
view.getLayoutParams().width = dimensionInPixel;
view.requestLayout();

Dp द्वारा कैसे सेट करें :

int dimensionInDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dimensionInPixel, getResources().getDisplayMetrics());
view.getLayoutParams().height = dimensionInDp;
view.getLayoutParams().width = dimensionInDp;
view.requestLayout();

आशा है कि यह आपकी मदद करेगा।


1
मैं इसे विशिष्ट dp मान (यानी px से dp में परिवर्तित नहीं) के लिए कैसे करूंगा?
5

@Hiren का अर्थ क्या है getResources ()। GetDisplayMetrics () जब मैं दस्तावेज़ पढ़ता हूं, तो यह DisplayMetrics लगता है। क्या आप कृपया मुझे थोड़ा समझा सकते हैं। मैं Android के लिए नया हूँ, धन्यवाद।
श्रीनी

इसके कारण: java.lang.NullPointerException: फ़ील्ड के लिए लिखने का प्रयास 'int android.view.ViewGroup $ LayoutParams.height' को एक अशक्त वस्तु संदर्भ पर
MD Khali

16

यदि आपको अपनी चौड़ाई या ऊंचाई match_parent(अपने माता-पिता के रूप में बड़ी) या wrap_content(अपनी आंतरिक सामग्री फिट करने के लिए पर्याप्त ) सेट करने की आवश्यकता है , तो ViewGroup.LayoutParamsयह दो स्थिरांक हैं:

imageView.setLayoutParams(
    new ViewGroup.LayoutParams(
        // or ViewGroup.LayoutParams.WRAP_CONTENT
        ViewGroup.LayoutParams.MATCH_PARENT,      
        // or ViewGroup.LayoutParams.WRAP_CONTENT,     
        ViewGroup.LayoutParams.MATCH_PARENT ) );

या आप उन्हें हकीम ज़ैद के जवाब की तरह सेट कर सकते हैं :

imageView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
//...

11

आप सभी मामलों के लिए मूल्य निर्धारित कर सकते हैं।

demoImage.getLayoutParams().height = 150;

demoImage.getLayoutParams().width = 150;

demoImage.setScaleType(ImageView.ScaleType.FIT_XY);

1
इसके कारण: java.lang.NullPointerException: फ़ील्ड को 'int android.view.ViewGroup $ LayoutParams.height' पर लिखने का प्रयास एक अशक्त वस्तु संदर्भ पर
MD Khali

8

एक बटन को गतिशील रूप से सेट करने का सबसे अच्छा और आसान तरीका है

 Button index=new Button(this);
 int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 45, getResources().getDisplayMetrics());             
 int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 42, getResources().getDisplayMetrics());

उपरोक्त ऊंचाई और चौड़ाई पिक्सल पीएक्स में हैं । 45 में ऊंचाई जा रहा है डी पी और 42 में चौड़ाई जा रहा है डी पी

 index.setLayoutParams(new <Parent>.LayoutParams(width, height));

उदाहरण के लिए, यदि आपने एक TableRayout के भीतर एक TableRow के भीतर अपना बटन रखा है, तो आपके पास TableRow.LayoutParams के रूप में होना चाहिए।

 index.setLayoutParams(new TableRow.LayoutParams(width, height));

8

बस एक लेआउटप्रैम ऑब्जेक्ट बनाएं और इसे अपने इमेज व्यू में असाइन करें

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 150);
imageView.setLayoutParams(params);

5
image_view.getLayoutParams().height 

पिक्सेल में ऊँचाई मान देता है। मूल्यों को ठीक से सेट करने के लिए आपको पहले स्क्रीन आयाम प्राप्त करने की आवश्यकता है।

 Display display = context.getWindowManager().getDefaultDisplay();
 DisplayMetrics outMetrics = new DisplayMetrics();
 display.getMetrics(outMetrics);
 int screen_height = outMetrics.heightPixels;
 int screen_width = outMetrics.widthPixels;

स्क्रीन आयाम प्राप्त करने के बाद, आप उचित मार्जिन का उपयोग करके इमेजव्यू की चौड़ाई और ऊंचाई निर्धारित कर सकते हैं।

 view.getLayoutParams().height = screen_height - 140;
 view.getLayoutParams().width = screen_width - 130 ;

3

क्रम में ImageView और ऊंचाई को निर्धारित करने के लिए, आप कर सकते हैं

            //Makesure you calculate the density pixel and multiply it with the size of width/height
            float dpCalculation = getResources().getDisplayMetrics().density;
            your_imageview.getLayoutParams().width = (int) (150 * dpCalculation);

            //Set ScaleType according to your choice...
            your_imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);


1

परिदृश्य में जहां विजेट आकार को प्रोग्रामेटिक रूप से सेट करने की आवश्यकता होती है, नीचे दिए गए नियमों को सुनिश्चित करें।

  1. LayoutParam उस लेआउट के लिए सेट करें जिसमें आप वह दृश्य जोड़ रहे हैं । मेरे मामले में मैं जोड़ रहा हूँTableRow ऐसाTableRow.LayoutParams
  2. इस कोड को फॉलो करें

final float scale = getResources().getDisplayMetrics().density; int dpWidthInPx = (int) (17 * scale); int dpHeightInPx = (int) (17 * scale);

TableRow.LayoutParams deletelayoutParams = new TableRow.LayoutParams(dpWidthInPx, dpHeightInPx); button.setLayoutParams(deletelayoutParams); tableRow.addView(button, 1);


1
यह मुझे पंसद है। मैं इसका उपयोग कर रहा हूँ! धन्यवाद।
n00dles

0

यदि आप छवि को केवल छवि दृश्य में फिट करना चाहते हैं, तो आप स्केल-प्रकार के साथ ऊँचाई और चौड़ाई की संपत्ति में "रैप कंटेंट" का उपयोग कर सकते हैं, लेकिन यदि आप मैन्युअल रूप से सेट करना चाहते हैं तो आपको लेआउटप्रैम का उपयोग करना होगा।

लेआउटपरम, लेआउट की ऊंचाई और चौड़ाई को प्रोग्रामेटिक रूप से सेट करने के लिए कुशल है।


0
int newHeight = 150;
            int newWidth = 150; 
            holder.iv_arrow.requestLayout();
            holder.iv_arrow.getLayoutParams().height = newHeight;
            holder.iv_arrow.getLayoutParams().width = newWidth;
            holder.iv_arrow.setScaleType(ImageView.ScaleType.FIT_XY);
            holder.iv_arrow.setImageResource(R.drawable.video_menu);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.