Study Record

Button 색상 바꾸기 , 바탕색(windowBackground) 본문

안드로이드

Button 색상 바꾸기 , 바탕색(windowBackground)

초코초코초코 2022. 4. 7. 15:57
728x90

Button 색상 바꾸기

 

원래의 Button 컴퍼넌트는 MaterialComponents 등 어떤 특정 테마에 미리 지정된 생상을 따라가기 때문에 Button 에 색상을 지정하려면 테마를 바꾸거나 <Button>에서 <AppCompatButton>를 사용한다.

 

<androidx.appcompat.widget.AppCompatButton
    app:layout_constraintEnd_toEndOf="@id/openButton"
    app:layout_constraintStart_toStartOf="@+id/openButton"
    app:layout_constraintTop_toBottomOf="@+id/openButton"
    android:layout_width="10dp"
    android:layout_height="10dp"
    android:background="@color/black"
    android:id="@+id/changePasswordButton"/>

 

바탕색(WindowBackground)

하나의 activity에 배경색을 주는 방법은 아래오 같이 xml 파일의 최상단 레이아웃에 background 속성으로 배경색을 설정하는 것이다.

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:background="@color/pomodoro_red"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/remainMinutesTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="00"
        android:textSize="40sp"
        android:visibility="visible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@id/remainSecondsTextView"
        app:layout_constraintHorizontal_chainStyle="packed"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

하지만 이렇게 되면 실행하게 되면 다음의 onCreate 과정의 setContentView 에서 xml 파일이 로드될 때 배경색이 설정되기 때문에 앱을 실행했을 때 다른색(ex. 하얀색)이었다가 설정한 배경색으로 바뀔 수 있다.

class MainActivity : AppCompatActivity() {
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 여기서 xml 파일 로드
        setContentView(R.layout.activity_main)
    }
}

 

 

이러한 문제를 해결하기 위해 theme 파일에 windowBackground 색상을 배경색으로 설정하면 좀 더 자연스럽게 색상을 설정할 수 있다.

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.Timer" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
        <item name="android:windowBackground">@color/pomodoro_red</item>
    </style>
</resources>

 

728x90