2010-06-17 16 views

Trả lời

40

Chuyển đổi nó như thế này

// The gesture threshold expressed in dip 
private static final float GESTURE_THRESHOLD_DIP = 16.0f; 

// Convert the dips to pixels 
final float scale = getContext().getResources().getDisplayMetrics().density; 
mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale + 0.5f); 

// Use mGestureThreshold as a distance in pixels 

từ đây http://developer.android.com/guide/practices/screens_support.html#dips-pels

+1

một cách tiếp cận simalar có sử dụng một tập tin tài nguyên http://stackoverflow.com/a/5369766/1815624 – CrandellWS

79

Tôi biết chủ đề này là cũ và đã trả lời nhưng tôi muốn cũng cho thấy đoạn mã này:

int MY_DIP_VALUE = 5; //5dp 

int pixel= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
           MY_DIP_VALUE, getResources().getDisplayMetrics()); 
1

Nếu đối tượng Paint của bạn đang được sử dụng để vẽ văn bản trên Canvas, bạn có thể cho phép xử lý Canvas mở rộng cho bạn.

Khi gọi số Canvas.drawText(), kích thước văn bản đầu tiên được xác định bởi đối tượng được chuyển trong đối tượng Paint, có thể được đặt qua Paint.setTextSize(). Kích thước văn bản được tự động thu nhỏ theo số Canvas dựa trên mật độ canvas, có thể được tìm thấy bằng cách sử dụng Canvas.getDensity().

Khi đặt kích thước văn bản trên đối tượng sơn sẽ được vẽ trên Canvas, hãy làm việc với giá trị đơn vị là dp hoặc sp và để Canvas xử lý mở rộng cho bạn.

+1

trong 'Paint.setTextSize (float textSize)' 'cái textSize' là một giá trị pixel. Nó dường như không chắc chắn với tôi rằng điều này được tự động thu nhỏ. Nếu nó đã làm sau đó tôi nghĩ rằng tài liệu sẽ nói rằng các đơn vị là 'sp' hoặc' dp' chứ không phải là pixel. – Suragch

8

Câu trả lời được chấp nhận dành cho cử chỉ, không đặt kích thước văn bản. Câu trả lời bình chọn cao nhất (tại thời điểm viết bài này) là gần nhưng tài liệu khuyến cáo sử dụng sp thay vì dp vì ngoài việc được chia tỷ lệ màn hình (như dp giá trị), sp cũng được chia tỷ lệ theo kích thước phông chữ của người dùng. @ pelotasplus của câu trả lời chỉ hoạt động nếu bạn đang nhận được giá trị từ các nguồn lực.

Từ một int trong mã

int spSize = 17; 
float scaledSizeInPixels = spSize * getResources().getDisplayMetrics().scaledDensity; 
mTextPaint.setTextSize(scaledSizeInPixels); 

Hoặc cách khác

int spSize = 17; 
float scaledSizeInPixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 
     spSize, getResources().getDisplayMetrics()); 
mTextPaint.setTextSize(scaledSizeInPixels); 

Từ nguồn

Hoặc nếu bạn có sp hoặc dp giá trị tài nguyên:

<resources> 
    <dimen name="fontSize">17sp</dimen> 
</resources> 

với

float scaledSizeInPixels = getResources().getDimensionPixelSize(R.dimen.fontSize); 
mTextPaint.setTextSize(scaledSizeInPixels); 

liên kết khác

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