안드로이드 어플리케이션 개발 시 보통 button, imageview 와 같은 view(뷰)의 크기는
xml 파일에서 layout-width, layout-height와 같은 attribute의 값을 직접 설정해줌으로써 설정할 수 있습니다.
크기 말고도 margin, padding의 값을 설정할 때 일반적으로 dp 단위를 사용합니다.
하지만 코드를 통하여(programmatically) view의 속성값들을 동적으로 변경해주어야 할 경우가 있습니다.
주로 해당 xml파일과 연관된 Activity에서 java코드를 통하여 해당 작업을 수행하게 됩니다.
이때, 자바코드를 통하여 view의 속성값을 조정할 때, 대부분의 메소드들은 px(픽셀) 단위로 값을 전달 받습니다.
xml에서는 dp값을 주로 사용하기 때문에, 값을 변환시켜주어야 의도하는 대로 값이 설정되게 됩니다.
예시를 통해 설명해보겠습니다.
위의 예시에서는, 새로운 LayoutParams객체를 동적으로 생성한 뒤, 해당 객체의 margin속성 값을 설정하기 위하여
setMarginEnd() 라는 메서드를 호출하고 있습니다.
이때 이 메서드는 매개변수로 값을 전달 받을 때, px값을 사용합니다.
marginEnd 값으로 8dp를 설정해주고자 한다면, 이를 px값으로 변환시켜주어야합니다.
간단하게 값을 변환시키기 위하여 간단한 함수를 작성하겠습니다.
위의 함수는 dp값을 전달받아서 px값으로 변환한 뒤 리턴해줍니다.
이제, 위의 함수를 예제에서 다음과 같이 사용하면 됩니다.