LinearLayout을 기반으로 사용자 지정 구성 요소를 만들었습니다. 아이디어처럼, 그것을 XML 레이아웃의 일부로 만드는 것입니다 : 런타임시2.2 이전 Android에서 레이아웃 최적화를 비활성화하는 방법은 무엇입니까?
<com.test.MyComponent
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical|center_horizontal"
/>
, 성분 (뷰 서브 클래스의 인스턴스를 추가하여) 동적으로 컨텐츠를 생성합니다. 이것은 Android 2.2 및 2.3에서 완벽하게 작동하지만 이전 플랫폼에서는 구성 요소가 단순히 표시되지 않습니다. 왜 그것이 사라지고 결국 그 이유를 알 수 있었는지 알아 내기 위해 많은 시간을 보냈습니다.
2.2 이전 플랫폼에서 Android는 "현명한"최적화를 수행합니다. XML 레이아웃에 사용 된 사용자 정의 클래스는 LinearLayout이며 자식이 없으므로 전혀 표시하지 않습니다.
많은 해결 방법을 시도했습니다.
protected void dispatchDraw (Canvas canvas) {
super.dispatchDraw(canvas);
for (ChildView c : children) {
c.draw(canvas);
}
}
: 구성 요소의 코드에 다음 재정의를 추가 한 후
<com.test.MyComponent
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical|center_horizontal"
>
<View
android:layout_width="1px"
android:layout_height="1px"
/>
</com.test.MyComponent>
을 그리고 : 어느 정도 성공 단 하나 비어 있지이되도록 구성 요소에 더미보기를 추가
이렇게하면 구성 요소와 해당 내용이 표시 될 수 있지만 더미 뷰가 있으면 구성 요소와의 상호 작용이 엉망이며 더미를 숨기려고하면 구성 요소가 사라집니다.
다른 누군가가 이제는 나를 없애기 위해 하루 종일 보내는 최적화를 만드는 데 많은 노력을 기울인 것처럼 보입니다. 이 "도움이되는"최적화를 비활성화하는 방법이 있다면 누구라도 알 수 있습니까?
오랫동안 이에 대한 답변을 게시했지만 표시되지 않았습니다. 아직도 검토 중입니까? – Alexander