কোড থেকে কীভাবে লেআউট_ওয়েট অ্যাট্রিবিউট সেট করবেন?


245

layout_weightজাভা কোড থেকে গতিশীলভাবে অ্যান্ড্রয়েডে বোতামের জন্য বৈশিষ্ট্যের মানটি কীভাবে সেট করতে পারি ?


এটি এই প্রশ্নের / উত্তরের সাথে খুব মিল হবে: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ৪6363৮৮৩২২/২ এবং এটি : স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ৪636377৩৩৩/২
রিচ শুলার

যদি আপনি ইতিমধ্যে লেআউট (এক্সএমএল) ফাইলে ভিউ সংজ্ঞায়িত করেছেন, তবে নতুন লেআউটপ্যারাম তৈরি করা এক্সএমএল ফাইলে সংজ্ঞায়িত অন্যান্য প্যারামগুলিকে ওভাররাইট করে। সুতরাং প্রথমে আপনার "getLayoutParams" ব্যবহার করা উচিত। পূর্ণ উত্তর দেখতে stackoverflow.com/questions/4641072/...
Shirish Herwade

উত্তর:


463

আপনি এটি LinearLayout.LayoutParamsনির্মাণকারীর অংশ হিসাবে পাস করতে পারেন :

LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
    LayoutParams.MATCH_PARENT,
    LayoutParams.MATCH_PARENT,
    1.0f
);
YOUR_VIEW.setLayoutParams(param);

শেষ প্যারামিটারটি ওজন।


2
এটি হওয়া উচিতparam = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, (float) 1.0);
মিঠুন শ্রীধরণ

49
আপনি যদি ডাবল থেকে একটি ফ্লোটে কাস্ট করতে না চান তবে কেবল 1.0f
এক্সপ্লোর

8
অথবা 1fকোনও দশমিক স্থান না থাকলেও সরল
কথায় বলা যাক

4
অভিভাবক বিন্যাসটি হলে কী করবেনRelative
প্রতীক বুটানী

9
@ প্রকটিক যদি প্যারেন্ট লেআউট আপেক্ষিক হয় আপনি ওজন ব্যবহার করেন না
ইনভারটিগো

121

ব্যবহার LinearLayout.LayoutParams:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
params.weight = 1.0f;
Button button = new Button(this);
button.setLayoutParams(params);

সম্পাদনা: আহ, এরিকের উত্তর সহজ!


27
এরিকের আনসার লিখতে সহজ হতে পারে তবে আপনার পড়া সহজ। যেহেতু এটি বলে যে কোনটি 1.0f ব্যবহার করে তা ব্যবহার করা হয়।
জোহান

3
আপনার প্রতিষ্ঠিত হয়েছে যে আপনি 'ভিউ.গেটলয়আউটপ্যারামস ()' কল করে ফ্লাইতে ওজন পরিবর্তন করতে পারেন তারপরে মানটি সংশোধন করুন।
রবজিথাই

1
FILL_PARENTঅবচয় করা হয়েছে এবং MATCH_PARENTপরিবর্তে ব্যবহার করা উচিত।
সাইমন ফোর্সবার্গ

2
@ লোকালপিসিগুই সত্য নয়। যতক্ষণ আপনি এসডিকে> = 8 কে টার্গেট করছেন ( পুরানো ডিভাইসগুলির MATCH_PARENTপরিবর্তে এটি ব্যবহার করা যেতে পারে ) FILL_PARENT
কেভিন কপক

2
@ লোকালপিসিগুই এখন আর 7 বা ততোধিক এপিআই ব্যবহার করে না । আপনি যদি আপনার অ্যাপ্লিকেশনটি 7 বা ততোধিক এপিআইয়ের সাথে সামঞ্জস্য করার চেষ্টা করছেন, তবে আপনি সম্ভবত FILL_PARENTবনাম সম্পর্কিত উদ্বেগের আগে আরও অনেকগুলি সমস্যা সমাধান করতে পারেন MATCH_PARENT
সাইমন ফারসবার্গ 21

82

যদি আপনি ইতিমধ্যে আপনার বিন্যাস (এক্সএমএল) ফাইলে আপনার ভিউটি সংজ্ঞায়িত করেন তবে কেবল প্রোগ্রামিকভাবে ওজন পরিবর্তন করতে চান, এই উপায়টি আরও ভাল

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)   
mButton.getLayoutParams();
params.weight = 1.0f;
mButton.setLayoutParams(params);

এক্সপ্লোর পরিচালনা লেআউটপ্যারামগুলি আপনাকে এক্সএমএল ফাইলের মধ্যে মার্জিনের মতো সংজ্ঞায়িত অন্যান্য প্যারামগুলিকে ওভাররাইট করে বা আপনার এগুলি সমস্ত লেআউটপ্যারামে নির্দিষ্ট করতে হবে।


2
"প্যারাম.ওয়েট = 1 এফ;" সহ আপনি ইতিমধ্যে লেআউটপ্যারামস অবজেক্টে ওজন নির্ধারণ করছেন। "MButton.setLayoutParams (params);" কল করার দরকার নেই।
মিঃ মাফেন

2
না, আপনাকে লেটআউটপ্যামগুলি কল করতে হবে
এসআইআর কোডালট

1
এটি আসলে সবচেয়ে মার্জিত উত্তর এবং এটি সরাসরি একটি নির্দিষ্ট ইউআই অবজেক্ট পরিবর্তন করে। সেরা উত্তরটি এই পোস্টের চেয়ে খুব ভাল এবং পুরানো। সুতরাং এটি সেরা উত্তর হিসাবে প্রাপ্য। যদিও আমি এই পোস্টে upvated।
মূল অ্যান্ড্রয়েড

দুর্দান্ত এবং সহজ সমাধান!
জেরেমি

একটি যাদুমন্ত্র মত কাজ করে! অনেক অনেক ধন্যবাদ :)
বিনয় বিশ

26

প্রস্থ, উচ্চতা এবং ওজনযুক্ত কনস্ট্রাক্টর যদি কাজ না করে থাকে তবে প্রস্থ এবং উচ্চতা সহ কনস্ট্রাক্টর ব্যবহার করার চেষ্টা করুন। এবং তারপরে নিজেই ওজন সেট করুন।

এবং আপনি যদি ওজন অনুযায়ী প্রস্থ নির্ধারণ করতে চান তবে কনস্ট্রাক্টরের প্রস্থটি 0 হিসাবে নির্ধারণ করুন। একই উচ্চতার জন্য প্রযোজ্য। নীচের কোডটি আমার জন্য কাজ করে।

LinearLayout.LayoutParams childParam1 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT);
childParam1.weight = 0.3f;
child1.setLayoutParams(childParam1);

LinearLayout.LayoutParams childParam2 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT);
childParam2.weight = 0.7f;
child2.setLayoutParams(childParam2);

parent.setWeightSum(1f);
parent.addView(child1);
parent.addView(child2);

ঠিক যেটা আমার দরকার ছিল! প্রত্যেকে এখানে ওজন নির্ধারণের বিষয়ে কথা বলছে, যারা ওজনযুক্ত শিশুদের পিতামাতার দৃশ্যে যুক্ত করা হয় তখন কেউই তা দেখায় না! আমি আসলে প্যারেন্টভিউতে কীভাবে ওয়েটসাম যুক্ত করবেন তা সন্ধান করছিলাম! ধন্যবাদ!
Sud007

14

আমি যদি কারও উত্তর খুঁজছি তবে এটি ব্যবহার করুন:

LinearLayout.LayoutParams lay = (LinearLayout.LayoutParams) myLayout.getLayoutParams();
lay.weight = 0.5;

আপনি যদি এক্সএমএল ফাইল থেকে আপনার বিন্যাসের সূচনা করছেন তবে লিনিয়ার লেআউটটির জন্য নতুন লেআউট পরামিতি সরবরাহ করার চেয়ে এটি অনেক বেশি সুবিধাজনক হবে।


এটি গ্রহণযোগ্য উত্তর হওয়া উচিত কারণ এটি পূর্বের কোনও সেট ভেরিয়েবল যেমন প্রস্থ / উচ্চতা / মার্জিন / প্যাডিং ইত্যাদির কোনও পরিবর্তন করে না।
মিঃ মাফেন

1
যদি সেট করার দৃশ্যটি layout_weightইতিমধ্যে নির্ধারিত হয়ে গেছে, আপনাকে View.requestLayout()আপডেট করার জন্য কল করতে হবে।
আক্রমণাত্মক

6

যে কোনও LinearLayout.LayoutParamsএবং TableLayout.LayoutParamsআমার জন্য কাজ করেছে, বোতামগুলির জন্য সঠিক TableRow.LayoutParams। এটাই:

            TableRow.LayoutParams buttonParams = new TableRow.LayoutParams(
                    TableRow.LayoutParams.MATCH_PARENT,
                    TableRow.LayoutParams.WRAP_CONTENT, 1f);

ব্যবহার সম্পর্কে MATCH_PARENTবা WRAP_CONTENTএকই হতে হবে।


3
FILL_PARENTঅবচয় করা হয়েছে এবং MATCH_PARENTপরিবর্তে ব্যবহার করা উচিত।
সাইমন ফোর্সবার্গ

আমি মনে করি লেআউটপ্যারামস AT ম্যাচ_প্যারেন্টটি 0 এ পরিবর্তন করা উচিত
কুলমাইন্ড

আপনি LayoutParamsসরাসরি পিতামাতাকে কল করেন । আমি ধরে নিয়েছি LinearLayout.LayoutParamsআপনার পিতা-মাতাকে ছাড়াই ব্যবহার করার চেষ্টা করার একটি ক্র্যাশ হয়েছে LinearLayout
পরিত্যক্ত কার্ট

4

যদি আপনি ইতিমধ্যে লেআউট (এক্সএমএল) ফাইলে আপনার ভিউটি সংজ্ঞায়িত করেছেন এবং কেবলমাত্র ব্যাকরণ অনুসারে ওজন পরিবর্তন করতে চান তবে নতুন লেআউটপ্যারাম তৈরি করা আপনাকে এক্সএমএল ফাইলে সংজ্ঞায়িত অন্যান্য প্যারামগুলিকে ওভাররাইট করে।

সুতরাং প্রথমে আপনার "getLayoutParams" ব্যবহার করা উচিত এবং তারপরে লেআউটপ্যারাম সেট করুন

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mButton.getLayoutParams(); params.weight = 4f; mButton.setLayoutParams(params);



0

কোটলিন ব্যবহার করে আপনি এমন কিছু করতে পারেন:

import android.content.Context
import android.support.v4.content.ContextCompat
import android.support.v7.widget.CardView
import android.widget.*

import android.widget.LinearLayout

class RespondTo : CardView {
    constructor(context: Context) : super(context) {
        init(context)
    }

    private fun init(context: Context) {


        val parent = LinearLayout(context)

        parent.apply {
            layoutParams = LinearLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
                    FrameLayout.LayoutParams.WRAP_CONTENT, 1.0f).apply {
                orientation = LinearLayout.HORIZONTAL

                addView(EditText(context).apply {
                    id = generateViewId()
                    layoutParams = LinearLayout.LayoutParams(0,
                            LinearLayout.LayoutParams.WRAP_CONTENT, 0.9f).apply {
                    }
                })
                addView(ImageButton(context).apply({
                    layoutParams = LinearLayout.LayoutParams(0,
                            LinearLayout.LayoutParams.WRAP_CONTENT, 0.1f)
                    background = null
                    setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_save_black_24px))
                    id = generateViewId()
                    layoutParams = RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT).apply {
                        addRule(RelativeLayout.ALIGN_PARENT_RIGHT)
                        // addRule(RelativeLayout.LEFT_OF, myImageButton.id)
                    }
                }))
            }
        }
        this.addView(parent)
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.