JLOG

[안드로이드 스튜디오 강좌 #16] 토스트, 스낵바, 대화상자 - 토스트(Toast) 본문

안드로이드 스튜디오/Do it 안드로이드 스튜디오

[안드로이드 스튜디오 강좌 #16] 토스트, 스낵바, 대화상자 - 토스트(Toast)

정정선선 2020. 5. 20. 06:59
public void setGravity(int gravity, int xOffset, int yOffset)
public void setMargin(float horizontalMargin, float verticalMargin)

! 목표

간단한 메세지를 보여주었다 없어지는 뷰인 토스트를 알아보자

 

 

토스트는 간단한 메세지를 잠깐 보여주었다가 없어지는 뷰이다.

앱이 화면에서 사라지더라도 필요한 메세지가 그대로 표시 되 앱의 상태와 관계없이 보여줄 수 있다.

 

 

1. 토스트 메세지를 보여주는 방법

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

context 객체는 context 클래스를 상속한 액티비티를 사용할 수 있고, 참조할 수 없는 경우에는 getApplicationContext() 메서드를 호출하면 Context 객체가 반환된다.

메세지와 시간을 정하고 show() 메서드를 호출하면 토스트 메세지가 출력된다.

 

 

 

2. 토스트의 위치, 여백 지정하는 법

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

setGravity() : 토스트 뷰가 보이느 위치를 지정

gravity : Gravity.CENTER와 같이 정렬 위치를 지정

setMargin() : 외부 여백을 지정, 토스트를 중앙이나 우측 하단에 배치할 수 있음

 

 

-실습

토스트 위치 바꿔 보여주기

 

새 SampleToast 프로젝트를 생성하고 activity_main.xml에 하단 코드를 입력하거나 사진을 참고하여 LinearLayout안에 2개의 에디트텍스트와 1개의 버튼을 배치하자.

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/editText"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:inputType="numberSigned"
            android:hint="X 위치"
            android:textSize="20sp"/>

        <EditText
            android:id="@+id/editText2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:inputType="numberSigned"
            android:hint="Y 위치"
            android:textSize="20sp" />

        <Button
            android:id="@+id/button"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="띄우기"
            android:textSize="20sp"
            android:onClick="onButton1Clicked"/>
    </LinearLayout>
</LinearLayout>

-android:inputType="numberSigned" : 양수로 된 숫자만 입력할 수 있도록 설정

-android:onClick="onButton1Clicked" : 버튼이 눌릴 때 onButton1Clicked() 메서드가 호출 되도록 onClick 속성 설정

 

 

MainActivity.java

자바 파일에도 해당 코드를 입력해보자

package org.techtowm.sampletoast;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    EditText editText;
    EditText editText2;


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

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

    public void onButton1Clicked(View v) {
        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();
        }
    }
}

 

코드 설명

setGravity() 메서드로 위치를 지정한 후 show() 메서드를 호출해 토스트 메세지를 출력한다.

 

toastView.setGravity(Gravity.TOP|Gravity.TOP, xOffset, yOffset);
            toastView.show();

Gravity.TOP|Gravity.TOP 으로 설정하면 위치를 설정하는 기준을 왼쪽 위로 두고 xOffset, yOffset 값을 이용해 위치를 조정하게 된다.

 

Gravity.CENTER를 사용하면 설정 기준이 가운데로 만들 수 있다.

 

실행시켜보면 입력한 값에 대해 토스트 메세지의 위치가 달라진 것을 확인할 수 있다.

 

 

3. 토스트 모양 바꿔 보여주기

토스트 메세지의 모양을 바꿔보자.

X, Y 값을 입력하는 텍스트 메세지 하단에 버튼을 하나 추가하고 button의 text를 "모양 바꿔 띄우기"로 설정해주자.

버튼이 클릭 되었을 때 onButton2Clicked() 메서드가 호출 되도록 onClick 속성을 추가한다.

 

 

-XML 추가한 코드

<Button
        android:id="@+id/button4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="onButton2Clicked"
        android:text="모양 바꿔 띄우기" />

이제 "모양 바꾼 토스트" 버튼을 클릭하면 모양을 바꾼 토스트를 출력할 수 있도록

 

onButton1Clicked 메소드 아래에 하단의 Java 코드를 입력한다.

public void onButton2Clicked(View v) {
        LayoutInflater inflater = getLayoutInflater();

        View layout = inflater.inflate(
                R.layout.toastborder,
                (ViewGroup) findViewById(R.id.toast_layout_root));

        TextView text = layout.findViewById(R.id.text);

        Toast toast = new Toast(this);
        text.setText("모양 바꾼 토스트");
        toast.setGravity(Gravity.CENTER, 0, -100);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(layout);
        toast.show();
    }

 

코드설명

LayoutInflater 객체를 사용해 XML로 정의된 레이아웃(toastborder.xml)을 메모리에 객체화 하고 있다. 이것은 XML 레이아웃을 메모리에 로딩하는데 사용된다.

 

 

 

-/app/res/layout 디렉토리에 toastborder.xml을 생성해 아래 코드를 입력해준다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toast_layout_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="10dp">

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="20dp"
        android:textSize="32sp"
        android:background="@drawable/toast"
    />

</LinearLayout>

toastborder.xml 코드 안에 toast가 정의되어 있는 것을 확인할 수 있다.

 

 

-app/res/drawable 안에 toast.xml 파일을 생성해 아래 코드를 입력해주자

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

    <stroke
        android:width="4dp"
        android:color="#7B68EE"
        />
    <solid
        android:color="#1E90FF"
        />
    <padding
        android:left ="20dp"
        android:top ="20dp"
        android:right ="20dp"
        android:bottom="20dp"
        />

    <corners
        android:radius="15dp"
        />
</shape>

 

 

이제 실행시켜 보면 모양이 바뀐 토스트를 확인할 수 있다.

이와 같이 토스트의 모양, 색깔 등을 특정 어플에 어울리게 바꿔 이용할 수 있다.

 

 

 

## 이 글은 Do it 안드로이드 앱 프로그래밍을 참고해서 작성되었습니다.

도서에는 더 자세하고 알기 쉽게 설명이 되어 있어 도서를 참고하면서 공부하는 것을 추천드립니다.

도서 정보 : http://www.yes24.com/Product/Goods/15789466

 

Do it! 안드로이드 앱 프로그래밍

안드로이드 분야 1위 도서, 개정 2판으로 돌아오다! (롤리팝, 안드로이드 스튜디오)안드로이드 분야에서 큰 사랑을 받아온 [Do it! 안드로이드 앱 프로그래밍]의 두 번째 전면 개정판이 나왔다. 최신 롤리팝 버전을 적용한 이번 개정 2판은 지난 젤리빈 개정판보다 더 개정폭이 커졌다. 특히 2014년 12월 발표된 안드로이드 공식 개발 도구인 ‘안드...

www.yes24.com

유투브 강의 : https://www.youtube.com/watch?v=nN4xnEcnjE8

Comments