JLOG
[안드로이드 스튜디오 강좌 #16] 토스트, 스낵바, 대화상자 - 토스트(Toast) 본문
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 안드로이드 앱 프로그래밍을 참고해서 작성되었습니다.
도서에는 더 자세하고 알기 쉽게 설명이 되어 있어 도서를 참고하면서 공부하는 것을 추천드립니다.
'안드로이드 스튜디오 > Do it 안드로이드 스튜디오' 카테고리의 다른 글
[안드로이드 스튜디오 강좌 #17] 프로그레스바 사용하기 (0) | 2020.05.23 |
---|---|
[안드로이드 스튜디오 강좌 #16] 토스트, 스낵바, 대화상자 - 스낵바, 대화상자 (1) | 2020.05.21 |
[안드로이드 스튜디오 강좌 #15] 이벤트 처리 이해하기 - 단말 방향 전환 이벤트 처리 (0) | 2020.05.19 |
[안드로이드 스튜디오 강좌 #15] 이벤트 처리 이해하기 - 제스처 이벤트 처리하기 / 키이벤트처리하기 (0) | 2020.05.16 |
[안드로이드 스튜디오 강좌 #15] 이벤트 처리 이해하기 - 이벤트 처리 방식 / 터치 이벤트 (0) | 2020.05.15 |