Toasts
Toast 는 LogCat 과 함께 Android App을 개발하면서 간단하게 테스트 할 때 유용하게 사용되는 기능입니다.
관련된 Android API Guide 는 이곳에서 보실 수 있습니다.
https://developer.android.com/guide/topics/ui/notifiers/toasts.html#Basics
If user response to a status message is required, consider instead using a Notification
The Basics
makeText() 메소드를 사용해 Toast 객체를 초기화합니다. 이 메소드는 3개의 파라미터를 갖습니다. (the application Context, the text message, and the duration for the toast)
show()를 사용해서 toast notification을 display 할 수 있습니다.
Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
이 예제 형식을 가장 많이 사용합니다. 다른 형식은 거의 사용할 일이 없을 겁니다. Toast 메세지의 표시 위치를 다르게 한다거나 Toast 메세지의 layout 을 여러분이 원하는 대로 꾸미고 싶을 경우 추가적으로 코딩을 하면 됩니다.
아래와 같이 한줄로 처리할 수 있습니다.
Toast.makeText(context, text, duration).show();
Positioning your Toast
기본적으로 Toast notification은 화면의 아랫쪽 중앙에 표시됩니다. 이 위치를 바꿀 수 있는데요. setGravity(int, int, int) 메소드를 사용하시면 됩니다.
이 메소드는 3개의 파라미터를 갖습니다. (a Gravity constant, an x-position offset, and a y-position offset)
예를 들어 toast가 top-left 에 표시되기를 원하시면 아래와 같이 하면 됩니다.
toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
오른쪽으로 좀 옮기고 싶으면 두번째 파라미터의 값을 높이면 됩니다. 아랫쪽으로 옮기고 싶으면 마지막 파라미터의 값을 올리면 됩니다.
Creating a Custom Toast View
메세지가 간단하지 않으면 layout을 customize 할 수 있습니다. custom layout을 만들려면 View layout을 XML 파일에 정의해야 합니다. 혹은 어플리케이션 안에 정의 할 수도 있ㅅ브니다. 그리고 root View를 setView(View) 메소드로 pass 합니다.
예제 (saved as layout/custom_toast.xml)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_toast_container"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="8dp"
android:background="#DAAA"
>
<ImageView android:src="@drawable/droid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
/>
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"
/>
</LinearLayout>
LinearLayout element의 ID는 "custom_toast_container" 입니다. 이 xml 파일의 이름은 custom_toast 이구요.
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_toast,
(ViewGroup) findViewById(R.id.custom_toast_container));
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("This is a custom toast");
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
우선 이 xml layout 파일을 inflate 시켰습니다. 그리고 infalte 시킬때 위에 언급한 ID 인 custom_toast_container 를 사용했구요.
이러면 해당 LinearLayout 이 성공적으로 inflate 되게 됩니다.
getLayoutflater() (혹은 getSystemService()) 를 사용해 LayoutInflater를 retrieve 합니다. 그리고 inflate(int, ViewGroup) 을 사용해서 layout 을 inflate 시키구요.
첫번째 파라미터는 layout resource의 ID 이구요. 두번째는 root View 입니다. 이 inflate 된 layout 에 다른 View 객체들을 넣을 수 있는데요. 여기서는 TextView를 넣었습니다. Image View를 넣을 수도 있습니다.
마지막으로 Toast(Context)를 사용해서 새로운 Toast를 생성하고 property들을 세팅합니다. 여기서는 Gravity 와 Duration을 세팅했습니다. 그 다음은 setView(View) 를 호출하고 이것을 inflate 된 layout에 pass 합니다. 이렇게 하면 show() 를 사용해서 customize 된 layout으로 toast를 표시할 수 있게 됩니다.
Note: Do not use the public constructor for a Toast unless you are going to define the layout with setView(View). If you do not have a custom layout to use, you must use makeText(Context, int, int) to create the Toast.
'WEB_APP > Android' 카테고리의 다른 글
[Android] Settings - 2 - (0) | 2016.10.10 |
---|---|
Udacity 강좌 - Lesson 3 실습 03 - Implicit Intent - (0) | 2016.10.09 |
Udacity 강좌 - Lesson 3 실습 02 - Settings 구현하기 - (1) | 2016.10.03 |
[Android] Settings - 1 - (0) | 2016.09.26 |
Udacity 강좌 - Lesson 3 실습 01 - 다른 Activity로 화면 전환하기 - (0) | 2016.09.21 |
Udacity 강좌 - Lesson 2 소스 실행 순서 따라가기 (0) | 2016.09.06 |
Udacity 강좌 - Lesson 2 실습 05 (2) | 2016.08.29 |
Udacity 강좌 - Lesson 2 실습 04 - 2과 완성 코드 실행 - (0) | 2016.08.23 |
Udacity 강좌 - Lesson 2 실습 03 (0) | 2016.08.17 |
Udacity 강좌 - Lesson 2 실습 02 (0) | 2016.08.16 |