0

LinearLayout에 프로그래밍 방식으로 뷰 (루트 뷰가 될 수 있음)를 추가해야하지만 뷰가 ConstraintLayout 인 경우 예상대로 작동하지 않습니다. 내 이해에 따르면, 하위 뷰는 부모 뷰가 무엇인지에 관계없이 작동해야하기 때문에 왜 이런 현상이 발생합니다. 이 작업을 어떻게 수행합니까?LinearLayout 내부의 ConstraintLayout이 작동하지 않습니다.

문제는 매우 간단하지만이 문제를 해결하는 질문을 찾을 수 없습니다. 나는 왜곡 된보기를 표시하는 스크린 샷을 첨부하고

:

원래보기 _____________________을 VIEW 여기 _______ enter image description here

그리고

enter image description here 코드입니다 INSIDE 선형 레이아웃을 추가 한 후 :

override fun setContentView(view: View?) { 
    val toolbar = layoutInflater.inflate(R.layout.view_toolbar, null, false) 
    titleView = toolbar.findViewById(R.id.title) as TextView 

    val finalView = LinearLayout(this) 
    finalView.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT) 
    finalView.orientation = LinearLayout.VERTICAL 
    finalView.addView(toolbar) 
    finalView.addView(view) 
    super.setContentView(finalView) 
} 

활동의 setContentView 기능을 재정의했습니다.

+0

finalView.addView (보기)를 수행 할 때 명시 적으로 LayoutParams를 설정 했습니까? 나머지 공간을 모두 차지하도록 1의 가중치를 부여 할 수도 있습니다. ** 편집 ** : 실제로, 나는 LinearLayoutParams.weight = 1이 당신이 원하는 것을 확실히 알고있다. – mbonnin

+0

무게? 나는 그것을 정말로 시도해야합니까? 체중이 'ConstraintLayout'이'LinearLayout'에서 재미있는 이유가 무엇인지와 아무런 관련이 없기 때문입니다. –

+1

@mbonnin 남자 당신은 아름다움! 그것은 효과가 있었다. 가중치가 아니라, AddingView를 명시 적으로 설정하는'LayoutParams' –

답변

0

ConstraintLayout 안에는 아무런 문제가 없었습니다. LinearLayout입니다. 내보기를 추가하는 동안 명시 적으로 LayoutParams을 추가해야했습니다.

override fun setContentView(view: View?) { 
    val toolbar = layoutInflater.inflate(R.layout.view_toolbar, null, false) 
    titleView = toolbar.findViewById(R.id.title) as TextView 

    val finalView = LinearLayout(this) 
    finalView.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT) 
    finalView.orientation = LinearLayout.VERTICAL 
    finalView.addView(toolbar) 
    finalView.addView(view, LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)) 
    super.setContentView(finalView) 
}