2017-03-17 49 views
1

在我的xml我有這樣的一個TextView:從計算的DP(DIP)不同的XML DP

android:textSize="18dp"(是的,我知道DP是不可取的文字,但那是題外話)

我有其他一些TextViews我要創建程序,以及我設置TEXTSIZE這樣:

view.TextSize = TypedValue.ApplyDimension(ComplexUnitType.Dip, 18, Resources.DisplayMetrics); 

然而,後者文本大小(以編程方式創建的)似乎比XML版本大了很多。我想知道爲什麼? :)

+0

在dimens.xml文件中查看我的具有值定義的答案。 –

回答

0

您應該使用setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize);因爲getDimension方法的文檔聲明它返回資源維度值乘以適當的度量值。我知道這是預先計算的絕對px值。

也就是說,使用方法:

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.text_size_small)); 
+0

哦對,我完全誤解了。當然,我需要的像素值:) – HelloWorld

0

試試這個

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14); 

Or 

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.font)); 
+0

我真的想用dp,並得到完全18dp,但我不相信上述這樣做? – HelloWorld

0

您需要在價值文件夾中尺寸申報文本大小dimens.xml,並得到該值,並將其設置你的TextView像下面的代碼。

dimens.xml

<resources> 
    <!-- Default screen margins, per the Android Design guidelines. --> 
    <dimen name="text_size">18dp</dimen> 

</resources> 

獲取text_size從dimens.xml像下面的代碼:

textView.setTextSize(getResources().getDimension(R.dimen.text_size)); 

//下面線在像素返回DP值。

int text_size = getResources().getDimension(R.dimen.text_size); 
+0

18dp不一定是我想要的。如果x dp僅在運行時才知道該怎麼辦?例如。在代碼中? – HelloWorld

+0

您需要在運行時在java代碼中知道18 dp的值 –

+0

當我們獲得像上面的代碼那樣的'dp'值時,它會返回一個像素值'x dp',我們在dimens.xml中聲明 –