As unidades de medidas estão para facilitar nossa programação para diferentes telas, para definir no XML é bem simples, basta inserir a medida e depois a unidade (android:layout_width=”100dp”), porem quando vamos fazer programaticamente, por padrão a medida aceita é dada por PX (pixel).
O objectivo é o de calcular o número de pixels de acordo com um determinado valor na unidade escolhida. A baixo transformamos o valor de 20dp na quantidade de PX equivalente.
TextView tv0 = new TextView(this); int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, getResources().getDisplayMetrics()); tv0.setWidth(px);
Se você quiser as métricas em SP, por exemplo, você só precisa mudar o TypedValue de TypedValue.COMPLEX_UNIT_DIP para TypedValue.COMPLEX_UNIT_SP ou qualquer outra métrica que você deseja usar.
Lembre-se de utilizar corretamente as unidades (veja aqui).