마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

★★★ 안드로이드 스튜디오에서 화면 색깔 바꾸기를 하려는데, 너무 늦게 적용 됩니다. ★★★

0 추천
엔터를 자주 눌렀을 뿐, 별로 길지 않은 질문입니다.

답변 부탁드립니다 ㅜㅜ

 

안드로이드 스튜디오에서 버튼을 누를 때마다

화면과 나머지 위젯들의 색깔을 변화시키는 코드를

짰는데요. 두 개의 클래스가 있습니다.

 

MainActivity 클래스하고 OptionsActivity 클래스가 있는데,

MainActivity 클래스의 변수 gameColor의 값이

0일 경우와 1일 경우의 색을 다르게 하도록 설정하고,

OptionsActivity 클래스에서 어떤 버튼을 누를 때마다

MainActivity 클래스의 변수 gameColor 값을 0 또는 1로

계속 변경 시키도록 코딩하였습니다.

 

그렇게 한 다음 실행을 해보니, 적용이 되긴 됩니다. 되는데,

너무 늦게 되는 것 같아요. 버튼을 누르자마자 바로 적용되는 게

아니라, 시간이 좀 지나고 나서야 적용이 되더라구요.

 

OptionsActivity 화면 같은 경우는 버튼을 누르고,

MainActivity 화면으로 한 번 왔다갔다 해야지만

적용이 되더군요. 원인을 알고 싶습니다. 도와주세요 ㅠㅠ

 

------------------------------------------

 

이건 MainActivity 클래스 입니다.

 

import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;

 

public class MainActivity extends AppCompatActivity
{
    private Intent intent;
    private ScreenActivity gameScreen;
    private RelativeLayout mainScreen;
    private Button startButton;
    private Button scoreButton;
    private Button optionsButton;
    static int gameColor = 0;

 

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

 

        mainScreen = (RelativeLayout)findViewById(R.id.MainScreen_Layout);

 

        startButton = (Button)findViewById(R.id.Start_Button);
        startButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                setContentView(gameScreen);
            }
        });

 

        optionsButton = (Button)findViewById(R.id.Options_Button);
        optionsButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                intent = new Intent(MainActivity.this, OptionsActivity.class);
                startActivity(intent);
            }
        });

 

        scoreButton = (Button)findViewById(R.id.Score_Button);
        scoreButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                intent = new Intent(MainActivity.this, ClearOverActivity.class);
                startActivity(intent);
            }
        });

 

        if(gameColor==0)
        {
            mainScreen.setBackgroundColor(Color.WHITE);
            startButton.setBackgroundColor(Color.WHITE);
            startButton.setTextColor(Color.BLACK);
            scoreButton.setBackgroundColor(Color.WHITE);
            scoreButton.setTextColor(Color.BLACK);
            optionsButton.setBackgroundColor(Color.WHITE);
            optionsButton.setTextColor(Color.BLACK);
        }

 

        if(gameColor==1)
        {
            mainScreen.setBackgroundColor(Color.BLACK);
            startButton.setBackgroundColor(Color.BLACK);
            startButton.setTextColor(Color.WHITE);
            scoreButton.setBackgroundColor(Color.BLACK);
            scoreButton.setTextColor(Color.WHITE);
            optionsButton.setBackgroundColor(Color.BLACK);
            optionsButton.setTextColor(Color.WHITE);
        }
    }
}

 

------------------------------------------

 

이건 OptionsActivity 클래스 입니다.

 

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.RelativeLayout;

 

public class OptionsActivity extends AppCompatActivity
{
    private RelativeLayout optionsScreen;
    private CheckBox musicCB;
    private CheckBox soundCB;
    private Button colorSet;

 

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.options);

 

        optionsScreen = (RelativeLayout)findViewById(R.id.OptionsScreen_Layout);

 

        colorSet = (Button)findViewById(R.id.GameColor_Button);
        colorSet.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
           {
               if(MainActivity.gameColor == 0)
                   MainActivity.gameColor=1;
               else
                   MainActivity.gameColor=0;
           }
        });

 

        musicCB = (CheckBox)findViewById(R.id.Music_CheckBox);
        soundCB = (CheckBox)findViewById(R.id.Sound_CheckBox);

 

        if(MainActivity.gameColor == 0)
        {
            optionsScreen.setBackgroundColor(Color.WHITE);

            colorSet.setBackgroundColor(Color.WHITE);
            colorSet.setTextColor(Color.BLACK);

            musicCB.setBackgroundColor(Color.WHITE);
            musicCB.setTextColor(Color.BLACK);

            soundCB.setBackgroundColor(Color.WHITE);
            soundCB.setTextColor(Color.BLACK);
        }

 

        if(MainActivity.gameColor == 1)
        {
            optionsScreen.setBackgroundColor(Color.BLACK);

            colorSet.setBackgroundColor(Color.BLACK);
            colorSet.setTextColor(Color.WHITE);

            musicCB.setBackgroundColor(Color.BLACK);
            musicCB.setTextColor(Color.WHITE);

            soundCB.setBackgroundColor(Color.BLACK);
            soundCB.setTextColor(Color.WHITE);
        }
    }
}
abchs8wyw (1,710 포인트) 님이 2016년 10월 19일 질문

1개의 답변

+1 추천
 
채택된 답변
변수가 바뀐다고 해서 알아서 뷰가 바뀌지 않습니다.

해당 함수를 계속 감시하는 쓰레드를 만들던가 해야 하지만....

가장 무난한 해결 법은 onActivityResult를 사용 하시는 겁니다.
ThisPlus (46,920 포인트) 님이 2016년 10월 19일 답변
abchs8wyw님이 2016년 10월 21일 채택됨
...