2010-07-23 33 views
33

Về cơ bản tôi có điều này bên trong XML, nhưng tôi phải tạo lại nó bên trong một mã. Tôi phải làm nó như thế nào?Làm cách nào để đặt kích thước Bố cục và Văn bản thành DP bên trong chương trình?

<EditText 
     android:layout_width="140dp" 
     android:layout_height="20dp" 
     android:background="@drawable/input_bg01" 
     android:textSize="10dp" 
     android:gravity="center" 
     android:text="111-222-333  FOOO" /> 

Tôi có thể sử dụng cài đặt này để đặt kích thước văn bản, nhưng chiều cao và chiều cao layout_ là gì?

edTxt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10); 

Có cách nào để yêu cầu mã sử dụng đơn vị DP thay vì pixel? Hoặc một chức năng chuyển đổi để chuyển đổi DP thành pixel?

Trả lời

45

Giải quyết here.

Extract:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics(); 
float dp = 20f; 
float fpixels = metrics.density * dp; 
int pixels = (int) (fpixels + 0.5f); 
72

Bạn có thể sử dụng:

float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics()); 

Bây giờ giá trị của pixels tương đương với 10dp tại mật độ màn hình hiện tại của thiết bị.

TypedValue chứa các phương pháp tương tự khác giúp chuyển đổi.

3

Chỉ cần cho đầy đủ: Một giải pháp (mà tôi muốn) cho câu hỏi được đưa ra here

setTextSize(float) hy vọng một giá trị pixel thu nhỏ lại. Vì vậy, setTextSize(10) sẽ cho bạn kết quả mong muốn. Tuy nhiên, getDimension()getDimensionPixelSize() trả về kích thước theo đơn vị pixel.

Vì vậy, ví dụ bạn nó sẽ là

setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.edTxt_text_size)); 

nơi <dimen name="edtxt_text_size">10dp</dimen> được thiết lập trong file dimens.xml của bạn chẳng hạn.

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