토스트 메세지를 보여주는데, 분명 글자를 dp로 설정했음에도 불구하고
글자 크기를 키우거나, 화면 크기를 키우면 너비가 고정되지 않고 화면을 벗어나면서 이상하게 나타나는 것이다!
기본 글씨 크기일 때는 멀쩡하게 보였었으니 말이다.ㅎ
그래서 너비를 wrap_content하고 margin을 주는 것이 아닌
토스트의 너비를 전체 디스플레이 너비의 90%로 설정해서 지정해줬더니 해결할 수 있었다.
아래는 소스 코드이다.
xml코드
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="80dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/custom_radius_10_solid_de000000"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_error_icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="12dp"
android:src="@drawable/icon_cancel"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_error"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_marginTop="13dp"
android:layout_marginEnd="12dp"
android:layout_marginBottom="13dp"
android:ellipsize="end"
android:fontFamily="@font/pretendard_medium"
android:maxLines="1"
android:textColor="@android:color/white"
android:textSize="14dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/iv_error_icon"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
커스텀 ErrorDialog 클래스
package com.aos.floney.view.common
import android.app.Dialog
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.Gravity
import android.view.WindowManager
import com.aos.floney.databinding.DialogToastErrorBinding
class ErrorToastDialog(context: Context, private val text: String): Dialog(context) {
private lateinit var binding: DialogToastErrorBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DialogToastErrorBinding.inflate(layoutInflater)
setContentView(binding.root)
// 다이얼로그 크기 및 위치 조정
window?.apply {
val params = attributes
params.width = WindowManager.LayoutParams.MATCH_PARENT // 화면 전체 너비로 설정
params.height = WindowManager.LayoutParams.WRAP_CONTENT
attributes = params
// 여백 효과를 위해 크기를 줄여줌
setLayout((context.resources.displayMetrics.widthPixels * 0.9).toInt(), WindowManager.LayoutParams.WRAP_CONTENT)
setGravity(Gravity.BOTTOM or Gravity.CENTER) // 중앙 아래쪽에 위치시킴
clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
}
binding.tvError.text = text
}
}
도저히 matchparent로 toast message를 그리려고 하는데 안나타났따..
그래서 직접 activity에서 레이아웃을 적용해주니 보이긴 했는데 양 옆 마진이 안보이는 것이다
setLayout((context.resources.displayMetrics.widthPixels * 0.9).toInt(), WindowManager.LayoutParams.WRAP_CONTENT)
이렇게 너비를 퍼센트로 설정해주니 되었다..감격
요약
코드를 대략 요약해보자면,
- 화면 너비 조정: WindowManager.LayoutParams.MATCH_PARENT로 기본적으로 화면 전체 너비로 설정하고, setLayout 메서드를 통해 화면 너비의 90%로 줄여 여백을 유지했다.
- 위치 조정: setGravity(Gravity.BOTTOM or Gravity.CENTER)로 중앙 하단에 배치하여 토스트와 유사한 위치를 설정한다.
- 배경 및 불투명 처리: 배경을 투명하게 설정하고 FLAG_DIM_BEHIND 플래그를 제거하여 배경 흐림 효과를 제거한다.
'Android' 카테고리의 다른 글
[Kotlin] 제네릭 (0) | 2024.11.12 |
---|---|
[Android] jcenter 빌드 오류 (2) | 2024.11.09 |
[Android] 키보드 높이 알아내기 (0) | 2024.11.04 |
[Android] 약간의 팁들 정리 (0) | 2024.10.15 |
[네이버 부스트캠프] 베이직 과정 START (0) | 2024.06.21 |