반응형

Ex12Toast

안드로이드 네이티브 앱 개발 수업 예제#12

주요코드

Toast 객체 생성 및 보이기와 위치설정 알아보기

  • 버튼을 클릭하여 기본적인 String메세지를 보여주는 토스트 객체 생성 및 보이기
  • 토스트에서 보여줄 String메세지를 res폴더>>values>>strings.xml문서안에 만들고 토스트에서 보여주기
  • 토스트가 보여지는 위치를 설정하기 (Gravity설정 및 xOffset, yOffset소개)
  • 토스트에 단순 문자열이 아닌 원하는 모양의 View 보여주기
    1. Java언어만으로 원하는 View모양 만들기[ res폴더>>layout폴더>>toast.xml문서 ]
    2. XML로 View객체 생성하고 적용하기 : layout폴더 안에 있는 toast.xml이라는 문서를 읽어서 View객체로 만들어(부풀려주는 inflate) 주는 LayoutInflater 객체소개

실행모습

[1.기본 Toast] 

  

[2.Toast 위치지정]          [3.Custom View Toast]

실행모습 GIF

 

소스코드

# activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:padding="16dp"
    tools:context=".MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Show Toast"
        android:textAllCaps="false"
        android:onClick="clickBtn"/>

</RelativeLayout>

 

# MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    Toast t;

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

    //onClick속성이 부여된 View가 클릭되면 자동으로
    //실행되는 메소드
    public void clickBtn(View v){

        //## 아래 1. 실습진행 후.... 버튼을 여러번 눌렀을 때 토스트가 밀리는 현상을 관찰한 후....... ###########
        //### 1.2 Toast 객체 생성가 null이 아니면 토스트가 이미 있는 상태여서 새로운 토스트가 대기했다가 보여짐. #########
        // 그래서 기존 토스트가 있으면 캔슬하도록...
//        if(t!=null){
//            t.cancel();
//            t=null;
//        }
        //##################################################################################################################

        //1. 토스트 객체 생성 [ new 키워드 대신에 makeText()메소드를 통해 토스트객체 생성 ]
        t= Toast.makeText( this , "clicked!!", Toast.LENGTH_SHORT);
        //토스트 객체를 만들었으니 화면에 보여주라는 기능메소드 호출!!
        t.show();


        //2. res/values/strings.xml안에 문자열을 작성하고 토스트에서 문자열 읽어와 보여주기
        t= Toast.makeText( this , R.string.text, Toast.LENGTH_SHORT);
        //토스트의 위치 지정 [ xOffset, yOffset : 첫번재 파라미터로 지정한 위치(Gravity.CENTER)에서 몇 픽셀 차이가 나도록 할 지 설정 ]
        t.setGravity(Gravity.CENTER, 0, -100);
        //토스트 보여주기
        t.show();


        //3. 토스트에 문자열이 아닌 원하는 모양의 View 보여주기
        // 빈 문자열을 가진 토스트객체 생성
        t= Toast.makeText(this, "", Toast.LENGTH_SHORT);

        // ### 3.1 Java언어로 View 객체 생성하는 방법  ###############
//        ImageView iv= new ImageView(this);
//        iv.setImageResource(android.R.drawable.ic_lock_silent_mode);
//
//        TextView tv= new TextView(this);
//        tv.setText("음소거");
//
//        LinearLayout layout= new LinearLayout(this);
//        layout.setOrientation(LinearLayout.VERTICAL);
//
//        layout.addView(iv);
//        layout.addView(tv);
//
//        t.setView(layout);
        //############################################################


        //### 3.2 XML로 View객체 생성하고 적용하기  ################################
        //layout폴더 안에 있는 toast.xml이라는 문서를 읽어서
        //View객체로 만들어(부풀려주는 inflate) 주는 객체를 Context로 부터 얻어오기
        LayoutInflater inflater= getLayoutInflater();
        View view= inflater.inflate(R.layout.toast, null);
        t.setView(view);

        t.setGravity(Gravity.CENTER, 0,0);
        t.show();
        //##########################################################################

    }
}

 

# res / layout / toast.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@android:drawable/ic_lock_silent_mode"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="음소거 모드"/>

</LinearLayout>

 

반응형

+ Recent posts