Giới thiệu
Ví dụ này minh họa cách tạo Button động (programmatically) và gán layout_weight thông qua LinearLayout.LayoutParams trong Java code.
Các bước thực hiện
Bước 1: Tạo dự án mới
Android Studio → File → New Project → Empty Activity.
Bước 2: Layout gốc (res/layout/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">
</LinearLayout>
Bước 3: Code MainActivity (src/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);
// Button 1: weight = 0.3 (30% không gian)
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);
// Button 2: weight = 0.7 (70% không gian)
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);
}
}
Bước 4: Manifest (androidManifest.xml)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
Chạy ứng dụng
Kết nối thiết bị, nhấn Run. Hai Button chia sẻ chiều ngang theo tỷ trọng 30% - 70%.

Giải thích kỹ thuật
- LinearLayout.LayoutParams: Class tham số layout cho con của LinearLayout.
weight: Float, tỷ trọng không gian còn lại sau khi cấp phát kích thước cơ bản (wrap_content/match_parent).
width = WRAP_CONTENT + weight > 0: View sẽ mở rộng để lấp đầy tỷ trọng.
- Tổng weight không cần = 1. Hệ thống chia tỷ lệ:
viewWeight / totalWeight.
Mở rộng: Cập nhật weight tại runtime
// Lấy params hiện tại, ép kiểu
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) button.getLayoutParams();
params.weight = 0.5f; // Thay đổi weight
button.setLayoutParams(params); // Áp dụng lại
button.requestLayout(); // Yêu cầu layout lại
Kotlin Extension Function (Tiện ích)
fun View.setWeight(weight: Float) {
val params = layoutParams as? LinearLayout.LayoutParams
?: LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
params.weight = weight
layoutParams = params
}
// Sử dụng:
button1.setWeight(0.3f)
button2.setWeight(0.7f)
Lưu ý
- Chỉ hoạt động trong LinearLayout (horizontal hoặc vertical).
- ConstraintLayout không dùng weight, dùng
app:layout_constraintWidth_percent (0.0-1.0) hoặc Chain/Barrier.
- Tạo View động nhiều → cân nhắc RecyclerView + Adapter thay vì addView thủ công.