2011-02-05 8 views
1

프로그래밍 방식으로 레이아웃을 작성하려고합니다.프로그래밍 방식으로 TextView 너비 가져 오기

이 레이아웃은 동적입니다. 데이터베이스에서 읽은 데이터를 기반으로 매번 다르게 보일 수 있습니다.

나는 방위가 세로로 설정된 LinearLayout을 가지고 있습니다.

내가 "행"에 할 수있는만큼 텍스트 (데이터베이스의 데이터)로 많은 TextViews를 맞추고 싶습니다.

내가하고있는 일은 행인 LinearLayouts를 작성하는 것입니다. 이러한 LinearLayouts에는 TextViews가 채워집니다. 필자는 TextView를 만들고 텍스트를 설정 한 다음 너비를 검사하여이 행에 맞는지 확인합니다 (화면 너비에서 모든 TextView 너비의 합계를 빼고 새 TextView가 맞는지 확인). 그렇지 않다면 새로운 LinearLayout을 만들고 TextViews를 추가하기 시작합니다.

문제는 myTextView.getWidth()와 myTextView.getMeasuredWidth()을 모두 반환 0

이유는 무엇입니까? TextView의 폭은 어떻게 얻을 수 있습니까?

+0

제 생각에, getWidth()를 너무 일찍 호출했을 수도 있습니다 ... BTW 어디에서 호출하고 있습니까? onCreate()에서 수행하는 것처럼 보입니다. onMeasure()에서 호출을 시도 할 수 있습니다. – TheCottonSilk

답변

0

우선, 코드를 게시하십시오. 둘째로 getWidth/getHeight이 0 번째 질문을 반환하면 A LOT가 표시되므로 더 많은 답변을 검색 할 수 있습니다.

onCreate (이러한 경우 일 수 있음)에서 이러한 메소드를 호출하면 UI가 아직 그려지지 않으므로 반환 값은 0입니다. 뷰를 그릴 때까지 뷰의 너비 또는 높이를 가져올 수 없습니다.

+0

AsyncQueryHandler를 사용하여 db의 데이터를 쿼리합니다. AsyncQueryhandler는 onResume()에서 호출됩니다. Cursor를 가져 오면 데이터로 View 객체를 작성하는 메소드를 호출합니다. 새로 만든 TextView를 이미 그린 LinearLayout에 추가하려고 시도했지만 TextView의 getWidth()는 여전히 0을 반환합니다. 그리지 않았으므로 0입니다. 나는 그 주위를 어떻게 감당할 수 있을지 모르겠다. (의미, 나는 너비를 잡을 수 있도록 draw 코드를 얻는 방법을 모른다.) – Andrew

+0

당신은 onLayout()을 시도 했습니까? :이 뷰가 각 자식에 크기와 위치를 지정해야 할 때 레이아웃에서 호출됩니다. 자식이있는 파생 클래스는이 메서드를 재정 의하여 각 자식에 대해 레이아웃을 호출해야합니다. – TheCottonSilk

+0

실제로 뷰를 그리기 전에 뷰의 너비와 높이를 가져올 수 있습니다. view.measure (View.Measurespec.UNSPECIFIED, View. MeasureSpec.UNSPECIFIED)와 같은 측정 값을 사용하면 미리 그려진 measuredWidth() 및 measuredHeight()를 가져올 수 있습니다. 그가 다시 물어 본 한 가지 이유는 SO를 통한 솔루션이 끔찍하기 때문에 타이머와 핸들러를 사용하는 사람들이 getWidth()와 getHeight()를 사용할 수 있도록 임의의 값으로 설정했기 때문입니다. 그 접근법은 나쁘고 말이되지 않습니다. – portfoliobuilder

관련 문제