[Android] 안드로이드 정리 (4) - 토스트, 스낵바, 대화상자, 프로그레스바
Android

[Android] 안드로이드 정리 (4) - 토스트, 스낵바, 대화상자, 프로그레스바

728x90

 

 

출처 : Do it! 안드로이드 앱 프로그래밍 / 정재곤

 

토스트

토스트는 간단한 메시지를 잠깐 보여주었다가 없어지는 뷰로 앱 위에 떠 있는 뷰라고 할 수 있다. 토스트 메시지를 만들어서 보여주는 방법은 다음과 같다.

Toast.makeText(Context context, String message, int duration).show();

 

토스트는 위치나 모양을 바꿀 수 있는데 다음의 두 메소드로 토스트의 위치와 여백을 지정할 수 있다.

public void setGravity(int gravity, int xOffset, int yOffset)
public void setMargin(float horizontalMargin, float verticalMargin)

> 토스트 위치 바꿔주기 예제

public class MainActivity extends AppCompatActivity {

    EditText editText;
    EditText editText2;

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

        editText = findViewById(R.id.editText);
        editText2 = findViewById(R.id.editText2);
    }

    public void onButton1Clicked(View view){
        try {
            Toast toastView = Toast.makeText(this, "위치가 바뀐 토스트 메시지입니다.", Toast.LENGTH_LONG);
            int xOffset = Integer.parseInt(editText.getText().toString());
            int yOffset = Integer.parseInt(editText2.getText().toString());
            toastView.setGravity(Gravity.TOP | Gravity.TOP, xOffset, yOffset);

            toastView.show();
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
    }
}

이 외에도 셰이프 드로어블을 사용해 토스트의 모양을 바꿔줄 수도 있다.

 

 

스낵바

간단한 메시지를 보여줄 때 토스트 대신 스낵바를 사용하기도 한다. 스낵바는 외부 라이브러리로 추가되었기 때문에 스낵바가 들어 있는 디자인 라이브러리를 추가해줘야 한다.

외부 라이브러리를 추가하려면 안드로이드 스튜디오 창 상단의 File -> Project Structure를 누른다. 오른쪽의 탭들 중에서 Dependencies를 누른 후 + 버튼을 눌러 Library Dependency 메뉴를 선택한다.

라이브러리 항목들이 보이면 com.android.support:design 항목을 찾아 선택한다.

이제 스낵바 관련 라이브러리를 사용할 수 있다.

public void onButton2Clicked(View view){
    Snackbar.make(view, "snack", Snackbar.LENGTH_LONG).show();
}

 

 

알림 대화상자

알림 대화상자는 사용자에게 확인을 받거나 선택하게 할 때 사용한다. 

public class MainActivity extends AppCompatActivity {
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        textView = findViewById(R.id.textView);
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showMessage();
            }
        });
    }

    private void showMessage() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setTitle("안내");
        builder.setMessage("종료하시겠습니까?");
        builder.setIcon(android.R.drawable.ic_dialog_alert);
        builder.setPositiveButton("예", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int whichButton) {
                String message = "예 버튼이 눌렸습니다. ";
                textView.setText(message);
            }
        });
        builder.setNeutralButton("취소", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int whichButton) {
                String message = "취소 버튼이 눌렸습니다. ";
                textView.setText(message);
            }
        });
        builder.setNegativeButton("아니오", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int whichButton) {
                String message = "아니오 버튼이 눌렸습니다. ";
                textView.setText(message);
            }
        });
        AlertDialog dialog = builder.create();

        dialog.show();
    }
}

 

 

프로그레스바 사용하기

어떤 일의 진행 상태를 중간 중간 보여줄 수 있는 가장 좋은 방법 중 하나가 프로그레스바이다. 프로그레스바의 형태는 두 가지가 있다.

속성 설명
막대 모양 작업의 진행 정도를 알려줄 수 있도록 막대 모양으로 표시한다.
원 모양 작업이 진행 중임을 알려준다. 원 모양으로 된 프로그레스바가 반복적으로 표시된다.

 

자바 코드에서 프로그레스바의 현재 값을 바꿀 때 사용하는 대포적인 메소드들은 다음과 같다.

void setProgress(int progress)
void incrementProgressBy(int diff)

setProgress 메소드는 정수 값을 받아 프로그레스바의 현재 값으로 설정한다. incrementProgressBy 메소드는 현재 설정되어 있는 값을 기준으로 값을 더하거나 뺄 때 사용한다. 

 

> 프로그레스바 예시

public class MainActivity extends AppCompatActivity {
    ProgressDialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        ProgressBar progressBar = findViewById(R.id.progressBar);
        progressBar.setIndeterminate(false);
        progressBar.setProgress(80);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog = new ProgressDialog(MainActivity.this);
                dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                dialog.setMessage("데이터를 확인하는 중입니다.");
                dialog.show();
            }
        });

        Button button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (dialog != null) {
                    dialog.dismiss();
                }
            }
        });
    }
}
728x90