2013-01-22 3 views
2

내 응용 프로그램에서 나는 linearlayout에서 gridview 있습니다. 화면 크기가 다르기 때문에 gridview의 컨테이너 (linearlayout)의 너비를 계산 한 다음 화면에 표시 할 열의 수를 결정합니다. 내 문제는. 내가 쓸 때선형 레이아웃 (보기) 안드로이드 크기

linearlayout.getwidth(); 

0을 반환합니다. 너무 작아서 oncreate 메소드에서보기의 크기를 얻지 못하기 때문입니다.

보기의 높이나 너비를 얻는 깨끗한 해결책은 무엇입니까?

은 내가

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); 
int gridSize = display.getWidth(); 

을 시도했지만 안드로이드는 더 이상 사용되지 :(

+0

실제로 onCreate() 메소드에 넣어야한다고 생각하십시오. 사람들은 모든 코드를이 방법에 넣는 경향이 있지만 때로는 좋은 생각이 아닙니다. 'Activity' 수명주기에 대해 더 자세히 읽어보십시오. http://developer.android.com/reference/android/app/Activity.html –

+0

gridview에 표시 할 열의 수를 결정하기 때문에보기가 초기화되기 전에이 정보가 필요합니다. onreume가 onreume가 onconthe이 문제에서 도울 수 없기 때문에 oncreate 아닙니다 ... 나의 질문이 가난하게 설명되는 경우에, 나는 그것을 더 자세하게 설명 할 것이나 친절하게 돕는 것을 돕는다는 것을 저에게 말하십시오. – abidkhan303

답변

1

Display.getWidth()Display.getHeight() 모두 Display.getSize(Point) 찬성 API (13)로 사용되지 않습니다. 모두와 호환되도록하기 위해, 당신이 가지고는 말한다 버전 확인하고 적절한 하나를 선택

이것은 내가 그렇게 할 방법은 다음과 같습니다.

Point size = new Point(); 
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); 
if (Build.VERSION.SDK_INT >= 13) { 
    display.getSize(size); // API 13+ 
} else { 
    size.x = display.getWidth(); 
    size.y = display.getHeight(); 
} 

그런 다음 나중에 너비가 size.x이됩니다. (귀하의 방법 서명 앞에 @TargetApi(13) @SuppressWarnings("deprecation")을 붙이십시오.)

명심하십시오. 이것은 단위의 표시 폭입니다. 한 뷰의 크기를 가져 오려면 UI가 배치 된 후에 호출해야합니다. 이 답변과 약간 관련이 없지만 대신 this thread's answer에서 해결책을 찾을 수 있습니다.

+0

는이 코드 \t \t 과 문제에 직면하고있는 경우 (Build.VERSION.SDK_INT abidkhan303

+0

왜 VERSION_CODES.GINGERBREAD를 사용하고 있습니까? 나는 분명히 13 (진저 브레드가 아닌 ICS)을 사용한다고 명시 적으로 말했습니다. – Eric

+0

에릭. 난 당신의 코드를 복사하고 난 OnCreate 메서드의 시작 부분에 @TargetApi ("deprecation") @SuppressWarnings을 넣었지만 Activity의 시작 부분에도이 문제가있다. – abidkhan303

관련 문제