প্রোগ্রামভিউ চিত্রের প্রস্থ এবং উচ্চতা সেট করবেন?


643

আমি কীভাবে একটি ImageViewপ্রস্থ এবং উচ্চতা প্রোগ্রামক্রমে সেট করতে পারি ?


4
আশ্চর্যজনক যেহেতু এটি শোনাচ্ছে, এই তথ্যগুলি খুঁজে পাওয়া বেশ শক্ত। প্রশ্ন আরও upvotes প্রাপ্য।
ফুনেহে

14
এটি অন্য প্ল্যাটফর্ম থেকে আসা যে কারও সাথে লড়াই করছে তার জন্য পাদটীকা। "ফিট এর আকার এবং আকৃতি" বিকল্প Android এর মধ্যে সুন্দর পরিচালিত হয়; তবে এটি খুঁজে পাওয়া শক্ত। আপনি সাধারণত প্রস্থের ম্যাচ প্যারেন্ট, উচ্চতার মোড়কের সামগ্রী, অ্যাডজাস্টভিউবাউন্ডগুলি চালু , স্কেল ফিটটোসেন্টার এবং ক্রপটোপডিং মিথ্যা করতে চান । তাহলে এটি স্বয়ংক্রিয় automatic আমি সত্যিই এটি কাউকে সাহায্য আশা করি!
ফ্যাটি

উত্তর:


1099

ইমেজভিউয়ের উচ্চতা নির্ধারণ করতে খুব বেশি দেরি হতে পারে তবে একই সমস্যাযুক্ত অন্যদের জন্য:

imageView.getLayoutParams().height = 20;

আশাকরি এটা সাহায্য করবে.

এটি গুরুত্বপূর্ণ। যদি আপনি লেআউটটি ইতিমধ্যে 'নির্ধারিত' হয়ে যাওয়ার পরে উচ্চতা নির্ধারণ করেন তবে আপনিও কল করেছেন তা নিশ্চিত করুন:

imageView.requestLayout();

102
যদি আপনি লেআউটটি ইতিমধ্যে 'নির্ধারিত' হয়ে যাওয়ার পরে উচ্চতা নির্ধারণ করেন তবে নিশ্চিত করুন যে আপনি চিত্র_দর্শনটি বলেছেন reউইকুয়েস্টলয়আউট ()
রাইস ডেভিস

9
আমার যদি মোড়ক_কন্টেন্ট দরকার হয়?
ফ্রান্সিসকো

8
ভোট দিন কারণ একদিন আপনি আমার বস ছিলেন এবং আমি এখনও আপনার কাছ থেকে হাকিম শিখছি :)
সামি এলটামায়ে

9
@FranciscoCorralesMorales wrap_content জন্য এটি ব্যবহার image_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT.. দৃশ্য পিতা বা মাতা করা হয়, তাহলে LinearLayoutপ্রতিস্থাপন RelativeLayoutএটা দিয়ে
সামি Eltamawy

39
সুতরাং, ইউনিট নির্দিষ্ট কিভাবে ? এটি কীভাবে বলা যায় এটি ডিপি , এসপি ইত্যাদি নয়
সাইদ নেমতি

231

যদি আপনার চিত্রের দৃশ্যটি গতিশীল হয় তবে getLayout সমেত উত্তরটি নাল-ব্যতিক্রম সহ ব্যর্থ হবে।

সেক্ষেত্রে সঠিক উপায়টি হ'ল:

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

7
যদি আমি সেই কোডটি রাখি তবে আমার চিত্র অদৃশ্য হয়ে যায়। কেন? ইমেজভিউ imgLogo = নতুন ইমেজভিউ (এটি); imgLogo.setImageDrawable (লোগো); লিনিয়ারলআউট.লয়আউটপ্যারামস লেআউটপ্যারামস = নতুন লিনিয়ারলআউট.লায়আউটপ্যারামস (32,32); imgLogo.setLayoutParams (layoutParams); row.addView (imgLogo);
মোস্তফা গেভেন

3
এই উত্তরের জন্য ধন্যবাদ, আমাকে সঠিক পথে রাখুন। একটি যুক্ত নোট হিসাবে, লিনিয়ারলআউটটি চিত্রের প্যারেন্ট ভিউ টাইপটিতে সেট করা উচিত। উদাহরণস্বরূপ, যদি আপনার চিত্রের ভিউ কোনও গ্যালারিতে থাকে তবে আপনার লিনিয়ারলআউটের পরিবর্তে গ্যালারী বিন্যাসের পরামিতিগুলি ব্যবহার করা উচিত বা আপনার কাস্টিং ব্যতিক্রম থাকতে পারে।
profexorgeek

3
@ মোস্তফাগেভেন আপনার মতোই আমার সমস্যা ছিল, যেখানে আমার ImageViewঅদৃশ্য হয়ে যায়। কৌশলটি হ'ল লেআউটের অংশটি (যেমন, <this_part_here>.LayoutParams) এর পিতামাতার মতো হওয়া ImageViewউচিত। সুতরাং, উদাহরণস্বরূপ, যদি আপনি এটি ImageViewএকটি এর TableRowমধ্যে স্থাপন করেন তবে আপনার এটি থাকা TableLayoutউচিত TableRow.LayoutParams
ব্যবহারকারী 2323030

ব্যবহারকারীর ($ কিছু_ সংখ্যা) -> বিস্তারিত জানার জন্য আপনার পিতামাতার অনুসারে লেআউটপ্যারাম তৈরি করতে হবে এবং এগুলি সন্তানের (চিত্র ভিউ) এ সেট করতে হবে, অনুরোধও লেআউট () লেখার সময় প্রয়োজনীয় বলে মনে হচ্ছে না
বামবমি

LOL আপনি নতুন প্যারাম তৈরি করেন, খারাপ উত্তর, আপনি কেবল বর্তমানগুলি পেতে পারেন, মানে আপনি যদি এটি করেন (নতুন তৈরি করুন) তবে আপনার এমনকি এক্সএমএল প্রয়োজন হবে না, এছাড়াও প্রোগ্রামিয়ালি চিত্রের চিত্র তৈরি / যুক্ত করুন ...
ব্যবহারকারীর ২৪

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 (); ইমেজভিউ আইভ = (লিনিয়ারআলআউট) ফাইন্ড ভিউবিআইআইডি (আর.আইডি.লেফ্ট); int প্রস্থ = display.getWidth (); // display , উচ্চতা); iv.setLayoutParams (parms);
সেলিম রাজা

লোকেরা intভেরিয়েবলগুলি অন্য কোথাও আবার ব্যবহার করা হবে না কেন তা ঘোষণা করে? অপ্রয়োজনীয় মনে হচ্ছে তবে আমি টিবিএইচ সম্পর্কে খুব বেশি জানি না।
n00dles

1
@ n00dles কে আরও ভাল বোঝার জন্য, অন্য কিছু নেই
42-

36

আমি এটি এক সাথে খেলেছি pixelএবং dp

private int dimensionInPixel = 200;

পিক্সেল দ্বারা কীভাবে সেট করবেন :

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

ডিপি দ্বারা কীভাবে সেট করবেন :

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

আশা করি এটি আপনাকে সহায়তা করবে।


1
আমি কীভাবে এটি একটি নির্দিষ্ট ডিপি মান (অর্থাত্ px থেকে dp রূপান্তর না করে) করব?
alxcyl

@ হিরেন গেটরোর্সোসেস () দ্বারা কী বোঝায় তা পান .ডিসপ্লে মেট্রিক্স () যখন আমি দস্তাবেজটি পড়ি, তখন এটি ডিসপ্লেমেট্রিক্স বলে মনে হয়। আপনি কি আমাকে একটু সংক্ষেপে ব্যাখ্যা করতে পারেন? ধন্যবাদ, আমি অ্যান্ড্রয়েডে নতুন।
শ্রীনী

এর কারণ: java.lang. নালপয়েন্টার এক্সেপশন: নাল অবজেক্ট রেফারেন্সে 'int android.view.ViewGroup $ LayoutParams.height' ফিল্ডে লেখার চেষ্টা
এমডি খালি

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. নালপয়েন্টার এক্সপেকশন: নাল বস্তুর রেফারেন্সে 'int android.view.ViewGroup $ LayoutParams.height' ফিল্ডে লেখার চেষ্টা
এমডি খালি

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());

উপরের উচ্চতা এবং প্রস্থ পিক্সেল px এ রয়েছে । 45 ডিপি মধ্যে উচ্চতা এবং 42 ডিপি প্রস্থ হয় ।

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

সুতরাং, উদাহরণস্বরূপ, আপনি যদি নিজের বোতামটি একটি টেবিলআউটগুলির মধ্যে একটি টেবিললাউটের মধ্যে রেখে দেন তবে আপনার এটি টেবিলরও হিসাবে হওয়া উচিত ay লেআউটপ্যারামস

 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

চিত্রভিউ এবং উচ্চতা প্রগ্রামক্রমে সেট করার জন্য, আপনি এটি করতে পারেন

            //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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.