Giới thiệu
Hướng dẫn này trình bày cách chuyển đổi giá trị pixel (px) sang density-independent pixels (dp) trong ứng dụng Android. Việc chuyển đổi này quan trọng để đảm bảo giao diện hiển thị nhất quán trên các màn hình có mật độ pixel khác nhau.
Các bước thực hiện
Bước 1: Tạo dự án mới
Mở Android Studio, chọn File → New Project và điền đầy đủ thông tin cần thiết để tạo dự án mới.
Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)
<?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:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
tools:context=".MainActivity">
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Chuyển đổi Pixel sang DP"
android:layout_centerInParent="true" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="Sans-Serif-Condensed"
android:textSize="14dp"
android:layout_below="@id/btn"
android:textStyle="italic"
android:textColor="#ff0000" />
</RelativeLayout>
Bước 3: Viết logic xử lý (src/MainActivity.java)
import android.content.Context;
import android.content.res.Resources;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final RelativeLayout rl = findViewById(R.id.rl);
final Button btn = findViewById(R.id.btn);
final TextView tv = findViewById(R.id.tv);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pixels_one = 38;
int pixels_two = 43;
Context context = getApplicationContext();
tv.setText("Chuyển đổi Pixel sang giá trị DP nguyên: \n" +
pixels_one + " pixels = " + getDPsFromPixels(context, pixels_one) + " dp\n" +
pixels_two + " pixels = " + getDPsFromPixels(context, pixels_two) + " dp\n");
tv.append("Chuyển đổi Pixel sang giá trị DP chính xác: \n" +
pixels_one + " pixels = " + getActualDPsFromPixels(context, pixels_one) + " dp\n" +
pixels_two + " pixels = " + getActualDPsFromPixels(context, pixels_two) + " dp");
}
});
}
// Chuyển đổi làm tròn thành số nguyên
public static int getDPsFromPixels(Context context, int pixels) {
Resources r = context.getResources();
int dps = Math.round(pixels / (r.getDisplayMetrics().densityDpi / 160f));
return dps;
}
// Chuyển đổi giữ nguyên phần thập phân
public static float getActualDPsFromPixels(Context context, int pixels) {
Resources r = context.getResources();
float dps = pixels / (r.getDisplayMetrics().densityDpi / 160f);
return dps;
}
}
Bước 4: Cấu hình 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>
<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ị Android thật với máy tính. Trong Android Studio, mở file activity và nhấn biểu tượng Run trên thanh công cụ. Chọn thiết bị di động của bạn để xem kết quả.

