আমি রানটাইম প্রোগ্রামে "অ্যান্ড্রয়েড: লেআউট_বেলো" সেট করতে পারি?


203

প্রোগ্রামটাইমের সমতুল্য সেট করার জন্য রানটাইমে রিলেটিভলআউট তৈরি করার সময় কি এটি সম্ভব android:layout_below?

উত্তর:


464

হ্যাঁ:

RelativeLayout.LayoutParams params= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); 
params.addRule(RelativeLayout.BELOW, R.id.below_id);
viewToLayout.setLayoutParams(params);

প্রথমত, কোডটি উচ্চতা এবং প্রস্থ উল্লেখ করে একটি নতুন লেআউট প্যারাম তৈরি করে। addRuleপদ্ধতি সঠিকভাবে XML সমতুল্য যোগ android:layout_below। তারপরে আপনি কেবল View#setLayoutParamsসেই ভিউগুলিতে কল করুন যে আপনি এই প্যারামগুলি রাখতে চান।


11
কেন এই উত্তর গ্রহণ করা যাবে না? এটি একটি খুব ভাল ব্যাখ্যা।
অদিত্যা

145

বিকল্পভাবে আপনি বর্তমান লেআউট প্যারামিটারের দর্শনগুলি ব্যবহার করতে পারেন এবং তাদের সংশোধন করতে পারেন:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) viewToLayout.getLayoutParams();
params.addRule(RelativeLayout.BELOW, R.id.below_id);

14
@ ইললি এই প্রশ্নের উত্তর দেওয়ার আরও একটি উপায় স্পষ্টভাবে, যার কারণেই এটির 11 টি প্রস্তাব রয়েছে।
অ্যালেক্স কে

8
এটিতে অন্য উত্তরের চেয়ে আরও বেশি উত্সাহ দেওয়া উচিত: দৃষ্টিভঙ্গির ধারাবাহিক আচরণ বজায় রাখতে আমাদের LayoutParamsনতুন তৈরির পরিবর্তে বিদ্যমানের সাথে কাজ করা উচিত । আসলে, এটি সঠিক উত্তর হিসাবে গ্রহণ করা উচিত।
অ্যালেক্স কার্শিন 21

10

@ জ্যাকোফালকোড উত্তরটি সঠিক হলেও এটি একটি লাইনে লেখা যেতে পারে:

((RelativeLayout.LayoutParams) viewToLayout.getLayoutParams()).addRule(RelativeLayout.BELOW, R.id.below_id);

1
এটি LayoutParamsআপনাকে সেট করার জন্য একটি রেফারেন্সের প্রয়োজন হওয়ায় এটি আপনাকে লেআউটটি পরিবর্তনের অনুমতি দেয় নাsetLayoutParams
স্টেফ

@ স্টেফ, আমি একটি প্রকল্পে এই সমাধানটি ব্যবহার করেছি। যদিও জ্যাকোফালকোড সমাধানটি এখানে একমাত্র সঠিক, আমি এটি সরল করে দিয়েছি। তবে এখন আমি মনে করি একটি লাইনে সংক্ষিপ্ত করা ভাল নয়, কারণ যদি কোনও ব্যতিক্রম ঘটে থাকে তবে অপারেটর কী উত্থাপন করেছে তা বোঝা শক্ত হবে।
কুলমাইন্ড

1
@ কুলমাইন্ড আমি কোডটি 1 টি লাইনে সংক্ষিপ্ত করতে পছন্দ করি না, এটি পড়া শক্ত করে তোলে, বিশেষত যখন কাস্টিং জড়িত থাকে তখন। এটি আমার উপায়ে করা আপনাকে আরও পরিবর্তন আনতে অনুমতি দেয় :)
জ্যাকফালকোড

@ জ্যাকফালকোড, আপনার সাথে একমত! বর্তমানে আমি বেশ কয়েকটি লাইনেও লিখি, কারণ যখন ক্র্যাশ ঘটে তখন কোন লাইনে কোনও ত্রুটি ঘটেছে তা বোঝা সহজ।
কুলমাইন্ড

1

ইনফিক্স ফাংশন সহ কোটলিন সংস্করণ

infix fun View.below(view: View) {
      (this.layoutParams as? RelativeLayout.LayoutParams)?.addRule(RelativeLayout.BELOW, view.id)
}

তারপরে আপনি লিখতে পারেন:

view1 below view2

অথবা আপনি এটিকে একটি সাধারণ ফাংশন হিসাবে কল করতে পারেন:

view1.below(view2)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.