View.setPadding chỉ chấp nhận bằng px, liệu có cách nào để setPadding trong dp không?


92

Hàm Android View.setPadding(int left, int top, int right, int bottom)chỉ chấp nhận giá trị bằng px nhưng tôi muốn đặt đệm bằng dp. Có cách nào xung quanh nó không?

Câu trả lời:


184

Đi thẳng đến mã

    int padding_in_dp = 6;  // 6 dps
    final float scale = getResources().getDisplayMetrics().density;
    int padding_in_px = (int) (padding_in_dp * scale + 0.5f);

1
Xin chào, tôi có một câu hỏi. Công thức này chỉ được sử dụng cho phần đệm hay bất cứ thứ gì khác? ví dụ như lề hoặc chiều tối của một hình chữ nhật?
emeraldhieu

4
Đây là công thức để Chuyển đổi đơn vị dp sang đơn vị pixel . Bạn có thể sử dụng nó bất cứ nơi nào
Labeeb Panampullan

2
Tôi giả sử đây getResources()là một hàm được kế thừa bởi một hoạt động, nhưng tôi đang cố gắng sử dụng những dòng này trong bộ điều hợp listview tùy chỉnh. Có cách nào tôi có thể làm điều này nếu tôi không gọi được getResources()không?
Mike Baxter

1
Từ bộ điều hợp của bạn, chỉ cần thực hiện getContext (). GetResources (). GetDisplayMetrics (). Mật độ;
Steve G.

4
Có lời giải thích ở đâu đó cho "+ 0,5f" không?
Xavier L.

96

Nếu bạn xác định thứ nguyên (bằng dp hoặc bất cứ thứ gì) trong tệp XML (dù sao thì tốt hơn, ít nhất là trong hầu hết các trường hợp), bạn có thể nhận được giá trị pixel của nó bằng cách sử dụng mã này:

context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)

2

Có một cách tốt hơn để chuyển đổi giá trị sang dp theo chương trình:

int value = 200;
int dpValue = (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            value,        
            context.getResources().getDisplayMetrics());

Sau đó, áp dụng dpValuecho phương pháp của bạn, ví dụ:setPadding(dpValue,dpValue,dpValue,dpValue);



0

Tôi cùng một vấn đề. Giải pháp duy nhất tôi đã tìm thấy (nó sẽ không thực sự giúp bạn :)) là đặt nó trong tệp Xml.

Nếu bạn có thể lấy mật độ từ mã, bạn có thể sử dụng chuyển đổi: "Việc chuyển đổi đơn vị nhúng sang pixel màn hình rất đơn giản: pixel = dips * (mật độ / 160)." (từ http://developer.android.com/guide/practices/screens_support.html )

Chỉnh sửa: bạn có thể lấy mật độ màn hình: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.