오늘 수업 때 배운 커스텀 토스트 메세지에 대해 포스팅하겠습니다.
안드로이드에서 토스트 메세지를 띄우는 것은 매우 간단합니다.
Toast.makeText(getApplicationContext(), "띄울 내용", Toast.LENGTH_LONG).show();
이 한줄이라면, 단순한 디자인의 토스트 메세지가 나타납니다.
이제, 이 토스트 메세지를 커스텀하게 바꿔서 띄우도록 하는 방법을 알아보겠습니다.
우선, XML 파일을 작성합니다.
다음과 같이, 버튼을 클릭하면 토스트 메세지가 나타나도록 구현했습니다.
위 XML은 LinearLayout에 Button 하나만 띄운 것입니다.
소스는 아래와 같습니다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.toastex.MainActivity" >
<Button
android:id="@+id/button1"
android:onClick="toastView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
그리고, 커스텀한 토스트 메세지를 작성해보겠습니다.
저는 위 그림과 같이 핑크색 박스엔 텍스트 메세지
그리고 밑에 작은 이미지를 포함한 메세지를 띄워보았습니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toast_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp"
android:background="@drawable/toast" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
</LinearLayout>
이 부분에서 중요한 것은, 전체 레이아웃의 아이디 값과
텍스트뷰의 아이디 그리고 배경에 적용한 @drawable/toast 부분입니다.
배경 부분은 커스텀한 텍스트 메세지 박스를 만들어주어 적용하는 것입니다.
그럼, res/drawable/ 에 저장된 toast.xml 파일을 확인해볼까요?
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<stroke
android:width="4dp"
android:color="#47a59b" />
<solid android:color="#ffaeaf" />
<padding
android:bottom="20dp"
android:left="20dp"
android:right="20dp"
android:top="20dp" />
<corners android:radius="15dp" />
</shape>
<shape /> 를 지정해 커스텀한 메세지 박스를 만듭니다
우선, shape를 rectangle로 설정한 것으로 보아 직사각형 모양인 박스를 만드는 것을 알 수 있습니다.
그리고 stroke는 테두리 선에 해당하며, solid는 박스의 배경색에 해당합니다.
corners를 적용해 테두리를 둥글게 처리하였습니다.
자, 이제 이 커스텀한 메세지를 띄워줄 코드로 가볼까요?
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void toastView(View v){
LayoutInflater inflater = getLayoutInflater();
// 레이아웃 인플레이터 객체 참조
// LayoutInflater 객체를 이용해 XML로 정의된 레이아웃을 메모리상에 객체화
// 토스트를 위한 레이아웃 인플레이션
View layout = inflater.inflate(R.layout.toastborder,
(ViewGroup)findViewById(R.id.toast_layout));
TextView tx = (TextView)layout.findViewById(R.id.text);
Toast toast = new Toast(getApplicationContext()); // 토스트 객체 생성
tx.setText("Hello World");
toast.setGravity(Gravity.CENTER, 0, 0);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout); // 토스트가 보이는 뷰 설정
toast.show(); // 토스트 메세지 보여줘!
Toast.makeText(getApplicationContext(), "띄울 내용", Toast.LENGTH_LONG).show();
}
}
주석을 참조하시면, 어떻게 토스트 메세지를 띄우는지 쉽게 파악하실 수 있을 것입니다.
그럼 결과 화면을 보면
위 회색 버튼을 클릭하면, 핑크색 메세지박스와 갤러리 아이콘 이미지가
토스트 메세지로 띄워집니다!
이상, 구구절절한 Custom Toast Message 포스팅을 마치도록 하겠습니다
많은 도움이 되시길 바랍니다!