Setting textSize programmatically

后端 未结 2 374
星月不相逢
星月不相逢 2020-12-24 00:32
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources().getDimension(R.dimen.result_font));

The following code works, but the R.dimen

相关标签:
2条回答
  • 2020-12-24 01:05

    You have to change it to TypedValue.COMPLEX_UNIT_PX because getDimension(id) returns a dimen value from resources and implicitly converted to px.

    Java:

    textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 
                         getResources().getDimension(R.dimen.result_font));
    

    Kotlin:

    textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 
                         resources.getDimension(R.dimen.result_font))
    
    0 讨论(0)
  • 2020-12-24 01:06

    Requirement

    Suppose we want to set textView Size programmatically from a resource file.

    Dimension resource file (res/values/dimens.xml)

    <resources>     
       <dimen name="result_font">16sp</dimen>
    </resources>
    

    Solution

    First get dimen value from resource file into a variable "textSizeInSp".

    int textSizeInSp = (int) getResources().getDimension(R.dimen.result_font);
    

    Next convert 16 sp value into equal pixels.

    for that create a method.

     public static float convertSpToPixels(float sp, Context context) {
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
    }
    

    Let's set TextSize,

    textView.setTextSize(convertSpToPixels(textSizeInSp , getApplicationContext()));
    

    All together,

    int textSizeInSp = (int) getResources().getDimension(R.dimen.result_font);
    textView.setTextSize(convertSpToPixels(textSizeInSp , getApplicationContext()));
    
    0 讨论(0)
提交回复
热议问题