2010-07-23 12 views
33

基本上我有這裏面的XML,但我必須在代碼中重新創建它。我該怎麼做?如何在程序內設置佈局和文本大小爲DP?

<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" /> 

我可以用它來設置文本大小,但是layout_width和height是什麼?

edTxt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10); 

有沒有辦法讓代碼使用DP單元而不是像素?或者將DP轉換爲像素的轉換函數?

回答

45

已解決here

提取物:

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

您可以使用:

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

現在的pixels值相當於10dp在設備的當前屏幕密度。

TypedValue包含幫助轉換的其他類似方法。

3

只是爲了完整性:對於這個問題的另一種解決方案(我寧願)給出here

setTextSize(float)期望的縮放像素值。所以,setTextSize(10)會給你想要的結果。但是,getDimension()getDimensionPixelSize()以像素爲單位返回大小。

因此,對於你的例子這將是

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

其中<dimen name="edtxt_text_size">10dp</dimen>在例如你dimens.xml文件中設置。

相關問題