Mẹo nhỏ: Chuyển từ đơn vị pixel sang đơn vị inch trong Android

Diem Do

Một câu hỏi phổ biến trong số các lập trình viên Android về việc hỗ trợ cho đa màn hình là: Bằng cách nào để tôi có thể chuyển từ đơn vị pixel sang đơn vị inch ? Sau đây là cách đơn giản giúp bạn hoàn thành xong nhiệm vụ này.

 

android091913.png

 

Một điều thú vị về hệ điều hành Android đối với người dùng và nhà sản xuất thiết bị là không có sự giới hạn nào về kích thước hiển thị trên màn hình. Một loạt các thiết bị Android với màn hình hiển thị siêu nhỏ như thiết bị đeo được G Watch, còn một số thiết bị khác có màn hình hiển thị khủng như Galaxy Mega của Samsung. Với vai trò là lập trình viên, chúng tôi phải viết code để có thể hoạt động tốt trên mọi kích thước màn hình hiển thị, hoặc là siêu nhỏ hoặc siêu khủng hoặc ở mọi loại màn hình có kích thước trung bình.

 

Để hỗ trợ cho các lập trình viên với mục tiêu cao cả viết code giao diện người dùng để có thể thích hợp cho vô số các kích thước màn hình. Google cung cấp cho chúng ta các công cụ để xác định kích thước màn hình, độ dày, sự định hướng, độ phân giải và phù hợp với sở thích của mọi người đối với từng đơn vị đo lường là dp (density-independent pixels). Google có một bài hướng dẫn chi tiết rất dài và vô cùng tuyệt vời để hỗ trợ làm việc trên nhiều màn hình khác nhau.

 

Tuy nhiên, thậm chí với bài hướng dẫn chính thức từ Google, một câu hỏi phổ biến mà tôi thấy hiện lên trong hầu hết các diễn đàn là “Bằng cách nào để tôi có thể chuyển từ đơn vị pixel sang đơn vị inch ?” Bạn hãy theo dõi cách làm sau sẽ giúp bạn gở rối thắc mắc này cho bạn, giúp bạn hoàn thành tốt việc này. Bạn theo dõi cẩn thận từng bước trong hướng dẫn, hay tải về và mang trực tiếp toàn bộ dự án thực hiện trên Eclipse.

 

1. Tạo ra một dự án Android mới trong Eclipse. Chọn SDK 14 (ICS) hay cao hơn.

 

2. Sửa tập tin trong thư mục the /res/layout/activity_main.xml chứa một <TextView> và một <Button> trong thẻ <LinerLayout>

 

activity_main.xml

<LinearLayout

    android_layout_width=”match_parent”

    android_layout_height=”match_parent”

    android_orientation=”vertical”

    android_layout_gravity=”left|center”

    android_gravity=”center” >

 

    <TextView

        android_id=”@+id/text”

        android_layout_width=”wrap_content”

        android_layout_height=”wrap_content”

        android_gravity=”center”

        android_background=”#00ff00″

        android_textColor=”#000000″

        android_text=’2″‘/>

    

    <Button

        android_layout_width=”wrap_content”

        android_layout_height=”wrap_content”

        android_layout_marginTop=”10dp”

        android_text=”Scale TextView”

        android_id=”@+id/scale_button” />

 

</LinearLayout>

 

3. Chuyển sang tập tin  /src/MainActivity.java. Sử dụng override trước phương thức onCreate() và onClick() như bạn thường sử dụng, sử dụng phương thức setViewWidthInInches() tại nơi mà chúng ta muốn hiển thị kích thước màn hình. Tư tưởng chung là để lấy được đơn vị pixel cho mỗi inch và sau đó làm tăng lên độ rộng mong muốn bằng inch.

 

MainActivity.java

package com.authorwjf.twoinches;

 

import android.app.Activity;

import android.os.Bundle;

import android.util.DisplayMetrics;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.LinearLayout;

import android.widget.LinearLayout.LayoutParams;

 

public class MainActivity extends Activity implements OnClickListener {

 

private static final float TWO_INCHES = 2f;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.scale_button).setOnClickListener(this);

}

 

@Override

public void onClick(View v) {

View textView = findViewById(R.id.text);

setViewWidthInInches(TWO_INCHES, textView);

}

 

private void setViewWidthInInches(float inches, View v) {

DisplayMetrics metrics = new DisplayMetrics();

        getWindowManager().getDefaultDisplay().getMetrics(metrics);

        float mXDpi = metrics.xdpi;

   int twoInches = Math.round(inches*mXDpi);

        v.setLayoutParams(new LinearLayout.LayoutParams(twoInches, LayoutParams.WRAP_CONTENT));

        v.requestLayout();

}

 

}

 

Hình A là hình ảnh Nexus 7 thực tế với một thước đo dọc theo chiều nhìn chính xác là 2 inch.

 

Hình A

 

measuredonandroiddevice081914.png

 

Chú ý: Số lượng các lập trình viên báo cáo vấn đề về phần mềm giả lập Android nên trở lại một sai sót độ dày màn hình, tôi cũng đã thực hiện điều này vài lần. Kể từ khi sử dụng thuật toán sắp xếp độ rộng hiển thị phụ thuộc vào sự hiểu biết về độ dày màn hình của thiết bị, tôi đã đề nghị chạy đoạn code ví dụ trên trong một thiết bị phần cứng thực tế.

Chia sẻ bài viết ngay

Nguồn bài viết : techrepublic.com