개발/안드로이드 (Android)
[Android] 뷰의 크기 (width, height) 구하기, 동적으로 크기 설정하기
거구마말랭이
2023. 2. 7. 13:54
목표:
LinearLayout의 크기를 TextView의 크기와 같게 만들기
layout/activity_main.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
android:text="Hello World!"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/dynamicView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:background="@color/colorAccent"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding // 뷰 바인딩
private var tvWidth = 0
private var tvHeight = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.textView.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
tvWidth = binding.textView.width // 텍스트뷰 width
tvHeight = binding.textView.height // 텍스트뷰 height
// LinearLayout에 width, height 적용하기
val params = binding.dynamicView.layoutParams
params.apply {
width = tvWidth
height = tvHeight
}
binding.dynamicView.apply {
layoutParams = params
}
// 다 쓰고 리스너 삭제
binding.textView.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
}
}
결과