LinearLayout.LayoutParams দিয়ে Weight ডাইনামিক সেট করা
Java কোড থেকে বাটন (বা যেকোনো ভিউ) এর layout_weight প্রোগ্রাম্যাটিকভাবে সেট করে লেআউটে যোগ করার পদ্ধতি।
ধাপ ১: প্রজেক্ট তৈরি
Android Studio-তে নতুন প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="center"
android:padding="4dp"
tools:context=".MainActivity">
<!-- বাটনগুলো Java-এ যোগ হবে -->
</LinearLayout>
ধাপ ৩: MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
LinearLayout linearLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
linearLayout = findViewById(R.id.linearLayout);
// বাটন ১: ৩০% প্রস্থ (weight = 0.3)
LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
);
params1.weight = 0.3f;
Button button1 = new Button(this);
button1.setText("Button 1 (30%)");
button1.setLayoutParams(params1);
linearLayout.addView(button1);
// বাটন ২: ৭০% প্রস্থ (weight = 0.7)
LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
);
params2.weight = 0.7f;
Button button2 = new Button(this);
button2.setText("Button 2 (70%)");
button2.setLayoutParams(params2);
linearLayout.addView(button2);
}
}
ধাপ ৪: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.dynamicweight">
<application ...>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
LayoutParams ও Weight-এর মূল নীতি
- orientation="horizontal" হলে weight = প্রস্থ (width) বণ্টন
- orientation="vertical" হলে weight = উচ্চতা (height) বণ্টন
width=0dp(horizontal) বাheight=0dp(vertical) সেট করলে weight সঠিক কাজ করে- WRAP_CONTENT দিয়ে weight দিলে কন্টেন্ট সাইজ অনুযায়ী আগে জায়গা নেয়, বাকি weight-এ বণ্টে
উন্নত উদাহরণ: 0dp width দিয়ে সঠিক weight বণ্টন
// সঠিক পদ্ধতি: width=0dp, weight দিয়ে পুরো প্রস্থ বণ্টন
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
0, // width = 0dp
LinearLayout.LayoutParams.WRAP_CONTENT
);
params.weight = 1f; // সমান বণ্টন (1:1:1...)
Button btn = new Button(this);
btn.setText("Equal Width");
btn.setLayoutParams(params);
linearLayout.addView(btn);
Kotlin Extension Function (সুবিধার জন্য)
fun LinearLayout.addWeightedButton(text: String, weight: Float) {
val params = LayoutParams(0, LayoutParams.WRAP_CONTENT).apply {
this.weight = weight
}
Button(context).apply {
setText(text)
layoutParams = params
}.also { addView(it) }
}
// ব্যবহার
linearLayout.addWeightedButton("Btn 1", 0.3f)
linearLayout.addWeightedButton("Btn 2", 0.7f)
সাধারণ ভুল ও সমাধান
| ভুল | সমাধান |
|---|---|
| weight সেট করলেও কাজ না করা | width/height 0dp সেট করুন |
| WRAP_CONTENT দিয়ে weight | MATCH_PARENT বা 0dp ব্যবহার করুন |
| parent LinearLayout না হওয়া | Parent অবশ্যই LinearLayout হতে হবে |
| orientation মিসম্যাচ | horizontal=width weight, vertical=height weight |