2014-10-13 1 views
0

집에 위젯이 2 개 있습니다. 자바 코드를 통해 2 (가운데) 열이 너무 픽셀, 내가 특정 크기에 대한 XMLRemoteViews가 setFloat를 통해 설정된 픽셀 크기의 TextView를 고려하지 않는 이유

<TextView 
    android:id="@+id/text_view_2" 
    android:layout_width="0dp" 
    android:width="0dp"   
    android:layout_height="match_parent" 
    android:layout_gravity="center_vertical" 
    android:paddingRight="8dp" 
    android:layout_weight="1" 
    android:textSize="24px" 
    android:gravity="right|center_vertical" /> 

를 통해 3 열 픽셀, 내가 특정 크기하십시오.

@Override 
public RemoteViews getViewAt(int position) { 
    ... 
    remoteViews.setFloat(R.id.text_view_1, "setTextSize", 24); 

두 번째 열과 세 번째 열은 둘 다 24 픽셀을 사용하므로 같은 크기가됩니다.

하지만 스크린 샷을 보면 그럴 수 없습니다! 내가 잘못한 건 없니? "setTextSize"에 적용

enter image description here

답변

2

방법은 setFloat() 항상 sp를 사용합니다. 마지막에 호출되는 메소드가 있습니다.

@android.view.RemotableViewMethod 
public void setTextSize(float size) { 
    setTextSize(TypedValue.COMPLEX_UNIT_SP, size); 
} 

봅니다 px에서 테스트 크기를 설정하기 위해 아래의 방법을 사용합니다.

remoteViews.setTextViewTextSize(R.id.text_view_1, 
           TypedValue.COMPLEX_UNIT_PX, 24); 

업데이트 : 당신은 진저 브레드를 지원해야하는 경우 당신은 setFloat()를 사용해야합니다. 내가 sp을 기대하고 있다는 것을 알고 있다면, 스케일링 후 원하는 px 크기에 해당하는 작은 값을 제공하려고합니다. 나는 이것이 공식이 될 것이라고 믿습니다. 나는 그것을 테스트 할 수 없었지만, 효과가있을 수있다.

float size = 24/getResources().getDisplayMetrics().scaledDensity; 
remoteViews.setFloat(R.id.text_view_1, "setTextSize", size); 
+0

아, 설명서가 있습니까? 'TextView'의'setTextSize' 문서를 직접 참조하는 것처럼 예상 단위는'pixel'입니다. –

+0

TextView 및 RemoteViews의 소스 코드를 확인하십시오. 모든 것이 있습니다. 나는 대답을 업데이트했다. –

+0

진저 브레드를 지원하기 위해'setTextViewTextSize'를 사용할 수 없습니다. 흥미 롭 군. 소스 코드에서 사용 된 단위가 sp임을 명확하게 볼 수 있습니다. 그러나 문서화에서, 그것은 '스케일 된 픽셀 크기.'를 의미합니다. 나는 Sp가'Scale-independent Pixels'을 의미한다고 생각했는데, 이것은'스케일 된 픽셀 크기 '와는 다른 것입니까? 죄송합니다. 혼란 스럽습니다. –

관련 문제