el porcentaje es relativo (x% relativo al ancho de la pantalla, y% relativo a la altura de la pantalla). no hace falta saber el tamaño de la pantalla. si pones 50%x para un view, ocupará la mitad de la pantalla (de la izquierea hasta la derecha, a partir de cierto punto, claro está). pero, ¡ojo!, si cambias la orientación del aparatito, "x" ahora se refiere a lo que era "y" debido al cambio de orientación. lo útil con el porcentaje es que te dices a tí mismo, quiero que esto ocupe la mitad. y sea lo que sea el tamaño de una pantalla, esa cosa ocupará la mitad (del ancho o de la altura, o ambos sin que tu sepas las dimensiones de la pantalla).
en cuanto a dip, de cierta forma, es fijo. pero se basa en la "densidad" de la pantalla, y esta "densidad" es diferente de acuerdo con el tamaño de la pantalla. si tienes una imagen de 640px x 320px que quieres mostrar en un imageview, cuando anades el imageview, pones activity.addview( imageview, 0%x, 0%y, 640dip, 320dip). así, la imagen se verá de la misma manera sea lo que sea el tamaño de una pantalla. si pones 640px x 320px, la imagen se verá cada vez más pequeña a medida que el tamaño de la pantalla va creciendo. aunque tu pantalla se presenta como, por ej, 1000 x 2000, no son pixels. 1000px en una pantalla grande se ven más grandes en una pantalla chica. 1000dip, en cambio, se ven de la misma manera en pantallas de diferentes dimensiones.