কীভাবে প্রোগ্রামগতভাবে আপেক্ষিক লেআউটে একটি বোতামের লেআউট_লাইন_পিতা_সামগ্রী ঠিক করতে পারেন?


285

আমার একটি আপেক্ষিক বিন্যাস রয়েছে যা আমি প্রোগ্রামগতভাবে তৈরি করছি:

 RelativeLayout layout = new RelativeLayout( this );
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);

এখন আমার কাছে দুটি বোতাম রয়েছে যা আমি এই আপেক্ষিক বিন্যাসে যুক্ত করতে চাই। তবে সমস্যাটি হ'ল উভয় বোতাম একে অপরের উপর সম্পর্কিত রিলেটিভলআউট এর বাম দিকে প্রদর্শিত হচ্ছে।

buttonContainer.addView(btn1);
buttonContainer.addView(btn2);

এখন আমি জানতে চাই যে আমি এক্সএমএল হিসাবে কীভাবে প্রোগ্রামটিমে বাটনের android:layout_alignParentRight="true"বা android:layout_toLeftOf="@id/btn"বৈশিষ্ট্যটি সেট করতে পারি ?

উত্তর:


638

আপনি LayoutParamsকোড ব্যবহার করে যে কোনওটি অ্যাক্সেস করতে পারেন View.getLayoutParamsLayoutParamsআপনার অ্যাক্সেস কী তা সম্পর্কে আপনাকে খুব সচেতন হতে হবে । এটি সাধারণত অন্তর্ভুক্ত ViewGroupথাকে কিনা তা পরীক্ষা করে অর্জিত হয় যদি এটির LayoutParamsঅভ্যন্তরীণ কোনও শিশু থাকে তবে আপনার ব্যবহার করা উচিত। আপনার ক্ষেত্রে এটি RelativeLayout.LayoutParams। ব্যবহার করে আপনি হবেন RelativeLayout.LayoutParams#addRule(int verb)এবংRelativeLayout.LayoutParams#addRule(int verb, int anchor)

আপনি কোডের মাধ্যমে এটি পেতে পারেন:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)button.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
params.addRule(RelativeLayout.LEFT_OF, R.id.id_to_be_left_of);

button.setLayoutParams(params); //causes layout update

1
নোঙ্গরের কোনও আইডি না থাকলে কী হবে? params.addRule (RelativeLayout.LEFT_OF, R.id.id_to_be_left_of); টেক্সটভিউ TVUserName = নতুন টেক্সটভিউ (আইন);
সেন্ট রবসন

18
কীভাবে আইডি যুক্ত করবেন?
ব্যবহারকারী 2161301

1
যদি buttonএকটি হয় RecycleView? একই উইজেটে একই বা বিপরীত নিয়ম যুক্ত করা কি সমস্যা নয়?
জোনস

এটি কেবল একবারের জন্য কাজ করছে, যদি আমি সারিবদ্ধতা পরিবর্তন করি তবে এটি আপডেট হচ্ছে না। আমি কি সমস্যা হতে পারে জানতে পারি ??
শশাঙ্ক ভঙ্গ

আমি এটি ব্যবহার করার চেষ্টা করেছি তবে এটি আমার কোডে লাল হয়ে যায় addRule?

12
  1. আপনাকে যে বোতামগুলি পুনরায় উল্লেখ করতে হবে তার জন্য আপনার তৈরি এবং আইডি প্রয়োজন: btn1.setId(1);
  2. আপনি আপনার লেআউটে প্যারামিটারগুলি যুক্ত করতে প্যারামগুলি পরিবর্তনশীল ব্যবহার করতে পারেন, আমার মনে হয় পদ্ধতিটি addRule()এই LayoutParamsঅবজেক্টটির জন্য অ্যান্ড্রয়েড জাভা ডক্স পরীক্ষা করে দেখুন ।

আমি কোডের যে কোনও অংশের অত্যন্ত প্রশংসা করব। আমি বোতামে কোনও পদ্ধতি খুঁজে পাই না।
ফাহাদ আলী

সেট আইডিতে কোনও লাভ হয় না কারণ এটি কেবলমাত্র সংখ্যার পরিবর্তে সত্যিকারের রিসোর্স আইডি প্রত্যাশা করে যেহেতু সেটআইডিটি @ আইড্রেস দিয়ে টীকায়িত হচ্ছে।
কেভিন টান

যে তারপর নতুন, আপনি অতীত উদাহরণস্বরূপ লেআউট থেকে একটি সম্পদ নম্বর নিতে ও রিসোর্স আইডির জন্য একটি বেস যে collide.i অনুমান গুগল অবরুদ্ধ করেছেন আবশ্যক করবে না / হিসাবে এটি ব্যবহার পারে
codeScriber

6

এমন একটি RelativeLayoutবৈশিষ্ট্য যুক্ত করার জন্য যার মান সত্য বা 0মিথ্যা এবং RelativeLayout.TRUEসত্যের জন্য মিথ্যা ব্যবহার :

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) button.getLayoutParams()
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE)

বৈশিষ্ট্যটি ইতিমধ্যে যুক্ত করা হয়েছে কিনা তা বিবেচ্য নয়, আপনি এখনও addRule(verb, subject)এটি সক্ষম / অক্ষম করতে ব্যবহার করেন। তবে, পোস্ট-এপিআই 17 আপনি ব্যবহার করতে পারেন removeRule(verb)যা কেবল একটি শর্টকাট addRule(verb, 0)


0

কোটলিন সংস্করণ:

ইনফিক্স ফাংশনগুলির সাথে এই এক্সটেনশনগুলি ব্যবহার করুন যা পরবর্তী কলগুলি সহজতর করে

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

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

infix fun View.alightParentRightIs(aligned: Boolean) {
    val layoutParams = this.layoutParams as? RelativeLayout.LayoutParams
    if (aligned) {
        (this.layoutParams as? RelativeLayout.LayoutParams)?.addRule(RelativeLayout.ALIGN_PARENT_RIGHT)
    } else {
        (this.layoutParams as? RelativeLayout.LayoutParams)?.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, 0)
    }
    this.layoutParams = layoutParams
}

তারপরে এগুলি ইনফিক্স ফাংশন কল হিসাবে ব্যবহার করুন:

view1 below view2
view1 leftOf view2
view1 alightParentRightIs true

বা আপনি এগুলিকে সাধারণ ফাংশন হিসাবে ব্যবহার করতে পারেন:

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