layout_weight
জাভা কোড থেকে গতিশীলভাবে অ্যান্ড্রয়েডে বোতামের জন্য বৈশিষ্ট্যের মানটি কীভাবে সেট করতে পারি ?
layout_weight
জাভা কোড থেকে গতিশীলভাবে অ্যান্ড্রয়েডে বোতামের জন্য বৈশিষ্ট্যের মানটি কীভাবে সেট করতে পারি ?
উত্তর:
আপনি এটি LinearLayout.LayoutParams
নির্মাণকারীর অংশ হিসাবে পাস করতে পারেন :
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT,
1.0f
);
YOUR_VIEW.setLayoutParams(param);
শেষ প্যারামিটারটি ওজন।
param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, (float) 1.0);
1f
কোনও দশমিক স্থান না থাকলেও সরল
Relative
ব্যবহার 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);
সম্পাদনা: আহ, এরিকের উত্তর সহজ!
FILL_PARENT
অবচয় করা হয়েছে এবং MATCH_PARENT
পরিবর্তে ব্যবহার করা উচিত।
MATCH_PARENT
পরিবর্তে এটি ব্যবহার করা যেতে পারে ) FILL_PARENT
FILL_PARENT
বনাম সম্পর্কিত উদ্বেগের আগে আরও অনেকগুলি সমস্যা সমাধান করতে পারেন MATCH_PARENT
।
যদি আপনি ইতিমধ্যে আপনার বিন্যাস (এক্সএমএল) ফাইলে আপনার ভিউটি সংজ্ঞায়িত করেন তবে কেবল প্রোগ্রামিকভাবে ওজন পরিবর্তন করতে চান, এই উপায়টি আরও ভাল
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)
mButton.getLayoutParams();
params.weight = 1.0f;
mButton.setLayoutParams(params);
এক্সপ্লোর পরিচালনা লেআউটপ্যারামগুলি আপনাকে এক্সএমএল ফাইলের মধ্যে মার্জিনের মতো সংজ্ঞায়িত অন্যান্য প্যারামগুলিকে ওভাররাইট করে বা আপনার এগুলি সমস্ত লেআউটপ্যারামে নির্দিষ্ট করতে হবে।
প্রস্থ, উচ্চতা এবং ওজনযুক্ত কনস্ট্রাক্টর যদি কাজ না করে থাকে তবে প্রস্থ এবং উচ্চতা সহ কনস্ট্রাক্টর ব্যবহার করার চেষ্টা করুন। এবং তারপরে নিজেই ওজন সেট করুন।
এবং আপনি যদি ওজন অনুযায়ী প্রস্থ নির্ধারণ করতে চান তবে কনস্ট্রাক্টরের প্রস্থটি 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);
আমি যদি কারও উত্তর খুঁজছি তবে এটি ব্যবহার করুন:
LinearLayout.LayoutParams lay = (LinearLayout.LayoutParams) myLayout.getLayoutParams();
lay.weight = 0.5;
আপনি যদি এক্সএমএল ফাইল থেকে আপনার বিন্যাসের সূচনা করছেন তবে লিনিয়ার লেআউটটির জন্য নতুন লেআউট পরামিতি সরবরাহ করার চেয়ে এটি অনেক বেশি সুবিধাজনক হবে।
layout_weight
ইতিমধ্যে নির্ধারিত হয়ে গেছে, আপনাকে View.requestLayout()
আপডেট করার জন্য কল করতে হবে।
যে কোনও 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
একই হতে হবে।
FILL_PARENT
অবচয় করা হয়েছে এবং MATCH_PARENT
পরিবর্তে ব্যবহার করা উচিত।
LayoutParams
সরাসরি পিতামাতাকে কল করেন । আমি ধরে নিয়েছি LinearLayout.LayoutParams
আপনার পিতা-মাতাকে ছাড়াই ব্যবহার করার চেষ্টা করার একটি ক্র্যাশ হয়েছে LinearLayout
।
যদি আপনি ইতিমধ্যে লেআউট (এক্সএমএল) ফাইলে আপনার ভিউটি সংজ্ঞায়িত করেছেন এবং কেবলমাত্র ব্যাকরণ অনুসারে ওজন পরিবর্তন করতে চান তবে নতুন লেআউটপ্যারাম তৈরি করা আপনাকে এক্সএমএল ফাইলে সংজ্ঞায়িত অন্যান্য প্যারামগুলিকে ওভাররাইট করে।
সুতরাং প্রথমে আপনার "getLayoutParams" ব্যবহার করা উচিত এবং তারপরে লেআউটপ্যারাম সেট করুন
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mButton.getLayoutParams();
params.weight = 4f;
mButton.setLayoutParams(params);
যদি layoutparams
ইতিমধ্যে সংজ্ঞায়িত হয় (এক্সএমএল বা গতিশীলভাবে), এখানে একটি লাইনার রয়েছে:
((LinearLayout.LayoutParams) mView.getLayoutParams()).weight = 1;
কোটলিন ব্যবহার করে আপনি এমন কিছু করতে পারেন:
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)
}
}