2017-10-05 21 views
0

Y 값과 다른 Y 값의 차이를 기반으로 TextView를 변환하려고합니다. TextView를 번역하기 전에 텍스트 크기를 변경하여 효과적으로 Y 값을 변경합니다. TextViews Y 값이 텍스트 크기가 변경된 직후에 업데이트되지 않는 문제가 발생합니다.텍스트 크기를 변경 한 직후의 TextView Top/Y 가져 오기

E.G. 아래의 두 로그 문 모두 동일한 결과를 얻습니다.

Log.i(TAG, String.valueOf(productTotal.getY())); 
productTotal.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); 
Log.i(TAG, String.valueOf(productTotal.getY())); 

그러나이 코드를 다시 실행하면 업데이트 된 Y 값을 받게됩니다. 내 생각 엔 아래 로직이 버튼을 누르면 호출되기 때문에 다음 프레임 업데이트 때까지 TextViews Y 값이 캐시되고있을 것입니다. 어쨌든, getTop, getY, getHeight 모두 부적절한 값을줍니다. TextViews 텍스트 크기를 변경 한 직후 업데이트 된 Y 값을 가져와야한다는 제안은 무엇입니까? 고맙습니다.

답변

0

getY()의 값을 즉시 찾아야하는 경우보기가 레이아웃 처리를 거칠 때 발생할 수있는 작업 중 일부를 예상해야합니다. 이것은 주로 다음과 같이 View#measure()에 호출을 포함합니다 :

TextView productTotal = (TextView) findViewById(R.id.textView1); 
int textSize = 100; 

Log.i(TAG, String.valueOf(productTotal.getY())); 
productTotal.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); 
Log.i(TAG, String.valueOf(productTotal.getY())); 
ViewGroup parent = ((ViewGroup) productTotal.getParent()); 
int widthMeasureSpec = 
    View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.UNSPECIFIED); 
int heightMeasureSpec = 
    View.MeasureSpec.makeMeasureSpec(parent.getHeight(), View.MeasureSpec.UNSPECIFIED); 
productTotal.measure(widthMeasureSpec, heightMeasureSpec); 
Log.i(TAG, String.valueOf(productTotal.getY())); 
// No getMeasuredY(), so we have to back into the new value for "Y". 
Log.i(TAG, String.valueOf(productTotal.getBottom() - productTotal.getMeasuredHeight())); 

doc for measure()를 참조하십시오.

[측정 값]은 뷰의 크기를 확인하기 위해 호출됩니다. 부모는 width 및 height 매개 변수에 제약 조건 정보를 제공합니다.

+0

나는 Y-Value post-textSize 변경을 예상 한 훨씬 간단한 해결책을 발견했습니다. 나는 아직도 이것이 문제로 시작하는 이유를 보는 것에 관심이있을 것입니다. 다음 레이아웃이 통과 될 때까지 android 프레임 워크가 View의 바운드 값을 캐시합니까? – whompum