Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách đặt margin cho LinearLayout bằng lập trình trong Android?

Giới thiệu

Bài viết minh họa cách thiết lập margin (lề) cho View con trong LinearLayout thông qua code Java/Kotlin thay vì XML.

Các bước thực hiện

Bước 1: Tạo dự án mới

Khởi tạo project Android Studio.

Bước 2: Layout container LinearLayout (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:layout_width="match_parent"
    android:id="@+id/linearLayout"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" />

Bước 3: Tạo Button và set margin bằng code (src/MainActivity.java)

package app.tutorialspoint.com.sample;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LinearLayout ll = findViewById(R.id.linearLayout);

        // Tạo LayoutParams cho LinearLayout
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT
        );

        // Đặt margin: left=30, top=20, right=30, bottom=0 (đơn vị pixel)
        layoutParams.setMargins(30, 20, 30, 0);

        Button okButton = new Button(this);
        okButton.setText("Nút bấm có margin");
        ll.addView(okButton, layoutParams);
    }
}

Bước 4: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.tutorialspoint.com.sample">
    <uses-permission android:name="android.permission.VIBRATE" />
    <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>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. Button sẽ hiển thị với margin trái/phải 30px, trên 20px.

Cách đặt margin cho LinearLayout bằng lập trình trong Android?

Kiến thức bổ sung

1. Chuyển đổi dp sang pixel (khuyên dùng)

public static int dpToPx(Context context, int dp) {
    float density = context.getResources().getDisplayMetrics().density;
    return Math.round(dp * density);
}

// Sử dụng
layoutParams.setMargins(dpToPx(this, 16), dpToPx(this, 12), dpToPx(this, 16), 0);

2. Margin cho các ViewGroup khác

  • RelativeLayout: RelativeLayout.LayoutParams
  • FrameLayout: FrameLayout.LayoutParams
  • ConstraintLayout: ConstraintLayout.LayoutParams (phức tạp hơn, dùng ConstraintSet)
  • ViewGroup.MarginLayoutParams: Class cha chung có setMargins()

3. Cập nhật margin động

// Lấy params hiện tại, sửa margin, apply lại
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) button.getLayoutParams();
params.setMargins(newLeft, newTop, newRight, newBottom);
button.setLayoutParams(params); // hoặc button.requestLayout()

4. Kotlin Extension Function (tiện lợi)

fun View.setMargins(@IntRange(from = 0) left: Int, @IntRange(from = 0) top: Int,
                    @IntRange(from = 0) right: Int, @IntRange(from = 0) bottom: Int) {
    val params = layoutParams as ViewGroup.MarginLayoutParams
    params.setMargins(left, top, right, bottom)
    layoutParams = params
}

// Dùng: button.setMargins(16.dp, 8.dp, 16.dp, 0)