2010-07-23 2 views
33

기본적으로이 코드는 XML 내부에 있지만 코드 안에 다시 만들어야합니다. 어떻게해야합니까?레이아웃 및 텍스트 크기를 프로그램 내부에서 DP로 설정하려면 어떻게합니까?

<EditText 
     android:layout_width="140dp" 
     android:layout_height="20dp" 
     android:background="@drawable/input_bg01" 
     android:textSize="10dp" 
     android:gravity="center" 
     android:text="111-222-333  FOOO" /> 

텍스트 크기를 설정하는 데 사용할 수 있지만 layout_width 및 height는 무엇입니까?

edTxt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10); 

픽셀 대신 DP 단위를 사용하도록 코드에 지시하는 방법이 있습니까? 또는 DP를 픽셀로 변환하는 변환 함수?

답변

45

해결 here.

추출 :

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics(); 
float dp = 20f; 
float fpixels = metrics.density * dp; 
int pixels = (int) (fpixels + 0.5f); 
72

당신은 사용할 수 있습니다

float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics()); 

지금 pixels의 값은 장치의 현재 화면 밀도 10dp에 해당합니다.

TypedValue에는 변환에 도움이되는 다른 유사한 방법이 있습니다. 그냥 완전성에 대한

3

은 다음 질문에 대한 (내가 선호하는 것) 또 다른 해결책은

setTextSize(float)here가 조정 픽셀 값을 기대 주어진다. 따라서 setTextSize(10)을 사용하면 원하는 결과를 얻을 수 있습니다. 그러나 getDimension()getDimensionPixelSize()은 픽셀 단위로 크기를 반환합니다.

그래서 당신의 예를 들어 그것은 <dimen name="edtxt_text_size">10dp</dimen>는 예를 들어 당신의 dimens.xml 파일에 설정되어

setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.edTxt_text_size)); 

될 것이다.

관련 문제