2010-07-31 34 views
6

Tôi đang tạo động lưới của chế độ xem EditText trong mã dựa trên số lượng hàng và cột được chỉ định. Tôi muốn mỗi chế độ xem EditText có cùng chiều rộng (ví dụ: 100dp).Cách lập trình chiều rộng của chế độ xem Chỉnh sửa Android trong DPs (không phải pixel)

Mặc dù tôi có thể đặt kích thước của chế độ xem bằng setWidth hoặc bằng cách tạo đối tượng LayoutParam, nhưng tôi dường như chỉ có thể chỉ định giá trị bằng pixel. Thay vào đó, tôi muốn sử dụng các đơn vị DP (mật độ độc lập), tương tự như những gì tôi đã thực hiện bằng cách sử dụng một bố cục XML.

Làm thế nào điều này có thể được thực hiện trong mã?

Trả lời

11

Tôi có một phương pháp trong một lớp học Utils mà không chuyển đổi này:

public static int dip(Context context, int pixels) { 
    float scale = context.getResources().getDisplayMetrics().density; 
    return (int) (pixels * scale + 0.5f); 
} 
+0

Bây giờ bạn đang nói về lớp Utils của bạn, có vẻ như một nơi tuyệt vời để đặt rất nhiều phương pháp và chức năng sẽ được sử dụng bởi chương trình chính của bạn hoặc các lớp khác. những thứ được sử dụng nhiều lần bởi chương trình của bạn? – Allan

+0

Cảm ơn các bạn đã viết mã. Tôi sẽ thêm một hàm chuyển đổi vào lớp Utils của ứng dụng của tôi. Tôi mới sử dụng Android. Tôi không thể không tự hỏi tại sao phương thức setWidth không có tính linh hoạt tích hợp như cài đặt thuộc tính android: layout_width trong một bố cục XML. – JeffR

+0

tôi có thể sử dụng phương pháp này để thiết lập chiều rộng của một điều khiển XML trong lớp hoạt động tương ứng? Tôi nhận thấy param đầu tiên là Context, bạn có thể đưa ra một ví dụ về cách mà phương thức trợ giúp này có thể được sử dụng để thiết lập động với onCreate của một hoạt động không? cảm ơn! –

5
float value = 12; 
int unit = TypedValue.COMPLEX_UNIT_DIP; 
DisplayMetrics metrics = getResources().getDisplayMetrics(); 
float dipPixel = TypedValue.applyDimension(unit, value, metrics); 
0

Sử dụng mã dưới đây tôi đã có thể làm điều đó.

int width = (int) TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_DIP, (100) Kích thước của bạn trong int, getResources() getDisplayMetrics().);

Các vấn đề liên quan