본문 바로가기

안드로이드/코드

[안드로이드] 커스텀 토스트(Toast), 스낵바(Snackbar) 사용하기

반응형

 

 

toast1

 

 

 

toast2

 

 

 

커스텀뷰를 이용한 토스트 그리고 스낵바를 띄우는 예제를 만들어보겠습니다.

 

 

1. activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <Button
        android:id="@+id/button1"
        android:text="토스트(Toast)"
        android:textSize="20sp"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/button2"
        android:text="스낵바(Snackbar)"
        android:textSize="20sp"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

 

 

2. toast.xml (토스트의 background 꾸미기, drawable 폴더에 생성)

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

    <stroke
        android:width="2dp"
        android:color="#050505"/>
    <solid
        android:color="#FFFFFF"/>
    <padding
        android:left="20dp"
        android:top="20dp"
        android:right="20dp"
        android:bottom="20dp"/>

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

</shape>

stroke - 테두리 색상 설정

solid - 내부 색상 설정

corners - 모서리를 둥글게 하는 정도 숫자가 클수록 더 둥글게 변합니다.

 

 

 

3. toast_layout.xml (토스트의 뷰를 꾸미는 레이아웃, layout 폴더에 생성)

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

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

</LinearLayout>

2번에서 만든 toast.xml을 TextView의 background에 설정해줍니다.

 

 

 

4. MainActivity.java

package com.example.sampletoast;

import android.graphics.Color;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    Button button1, button2;

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

        button1 = findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onButton1Clicked(v);
            }
        });
        button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onButton2Clicked(v);
            }
        });
    }


    //커스텀 토스트 띄우기
    public void onButton1Clicked(View view) {
        LayoutInflater inflater = getLayoutInflater();

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

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

        Toast toast = new Toast(this);

        text.setText("토스트 띄우기");

        text.setTextSize(15);

        text.setTextColor(Color.BLACK);

        toast.setGravity(Gravity.BOTTOM,0,0);

        toast.setDuration(Toast.LENGTH_SHORT);

        toast.setView(layout);

        toast.show();
    }

    //스낵바 띄우기
    public void onButton2Clicked(View view) {

        final Snackbar snackbar = Snackbar.make(view,"스낵바",Snackbar.LENGTH_LONG);

        //스낵바 우측 텍스트 띄우고 터치 했을때 이벤트 설정
        snackbar.setAction("스낵바 없애기", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                snackbar.dismiss();
            }
        });

        snackbar.show();
    }
}

 

LayoutInflater를 이용해서 3번에서 생성한 뷰를 가져와서 토스트에 설정해주는 방식입니다.

 

기본으로 제공되는 토스트를 사용하시려면

Toast.makeText(this, "", Toast.LENGTH_SHORT).show();

위 코드처럼 사용해주시면 됩니다.

 

setGravity(gravity, x좌표, y좌표)

gravity - Gravity.Bottom, Gravity.Top의 형태로 사용해주시면 됩니다.

setGravity를 이용하시면 토스트의 위치를 변경해서 보여줄 수 있습니다.

 

Snackbar의 액션을 설정해주는 부분을 스낵바가 사라지도록 설정을 했는데 원하는 대로 수정해서 사용하시면 좋을 것 같습니다.

 

위 코드는 'Do It 안드로이드 프로그래밍' 을 참고하여 만들었습니다.

반응형