If I assign an integer value to change a certain text size of a TextView using java code, the value is interpreted as pixel (px).
Now does anyone know how to assign it in sp?
If I assign an integer value to change a certain text size of a TextView using java code, the value is interpreted as pixel (px).
Now does anyone know how to assign it in sp?
You can use a DisplayMetrics object to help convert between pixels and scaled pixels with the scaledDensity attribute.
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity;
From Api level 1, you can use the public void setTextSize (float size) method.
From the documentation:
Set the default text size to the given value, interpreted as "scaled pixel" units. This size is adjusted based on the current density and user font size preference.
Parameters: size -> float: The scaled pixel size.
So you can simple do:
textView.setTextSize(12); // your size in sp
After trying all the solutions and none giving acceptable results (maybe because I was working on a device with default very large fonts), the following worked for me (COMPLEX_UNIT_DIP = Device Independent Pixels):
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);