Giới thiệu
Ví dụ này minh họa cách đặt một View (ImageView) tại tọa độ chính xác (x, y) trên màn hình bằng cách sử dụng RelativeLayout.LayoutParams với leftMargin và topMargin trong code Java (không dùng XML).
Bước 1: Tạo dự án mới
Tạo project Android Studio: File → New Project.
Bước 2: Layout gốc (res/layout/activity_main.xml)
Chỉ cần một RelativeLayout rỗng làm container.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/relativeLayout"
tools:context=".MainActivity">
</RelativeLayout>
Bước 3: MainActivity - Tạo View và đặt vị trí tuyệt đối
Tạo ImageView động, set LayoutParams với width/height cố định và marginLeft/marginTop để xác định vị trí.
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout rl = findViewById(R.id.relativeLayout);
ImageView iv = new ImageView(this);
iv.setImageResource(R.drawable.image); // Cần có image trong drawable
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(500, 400); // width, height (px)
params.leftMargin = 100; // X position
params.topMargin = 300; // Y position
rl.addView(iv, params);
}
}
Bước 4: Manifest
<?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>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Chạy ứng dụng
Chạy app, ImageView sẽ xuất hiện tại vị trí (100px, 300px) từ góc trên-trái của RelativeLayout, kích thước 500x400px.
Lưu ý quan trọng
- Đơn vị
leftMargin/topMarginlà pixel, không phải dp. Cần convert:px = dp * density. - Cách này không responsive - vị trí cố định pixel sẽ lệch trên màn hình khác density/kích thước.
- Khuyến nghị dùng ConstraintLayout với constraints (bias, chain, guideline) hoặc
translationX/Ycho animation. - Nếu cần overlay hệ thống (system alert window), dùng
WindowManager.LayoutParamsvới typeTYPE_APPLICATION_OVERLAY(yêu cầu quyềnSYSTEM_ALERT_WINDOW).