티스토리 뷰

Android

[Android] 토스트와 대화상자

감자형 2017. 9. 24. 15:05
  • 토스트와 대화상자

1
2
3
4
5
1. 다양한 위젯 확인하기
 
2. 토스트 메시지에 알아보기
 
3. alert 알림대화상자는 어떻게 보여줄까
cs

  • 토스트란?
1
간단한 메시지를 잠깐 보여주었다가 없어지는 뷰로 애플리케이션 위로 떠있는 뷰라 할 수 있음.
cs


  • 토스트 변경 예제
1. 프로젝트 생성Example_MyToast

2. 입력상자 2개(좌표값 입력시 그위치에 뜨게 한다거나 이런 예제) , 버튼 하나 생성

3. 버튼 클릭했을때 다른 좌표 보이게 하도록 하겠음.

4. 버튼(토스트 띄우기 버튼 생성) 

5. Main.Java 파일
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.example.example_toast;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
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 {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Button button = (Button) findViewById(R.id.button);
 
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // this를 참조 할 수 없을 때getApplicationContext()
                // show를 하지는 않는다.
                Toast toast = Toast.makeText(getApplicationContext(),"위치가 바뀐 토스트 메시지",Toast.LENGTH_LONG);
                // toast객체로 리턴 받기 위함
                toast.setGravity(Gravity.TOP | Gravity.LEFT,200,200);     //Gravity의 특징은 알고있는 특징과 유사하다
                toast.show();           // show()의 위치를 지금찍는것을 차이점 확인
 
            }
        });
 
 
 
 
        Button button2 = (Button) findViewById(R.id.button2);
 
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
 
                // 인플레이터 메모리객체화로 해서 참조하기
                LayoutInflater inflater = getLayoutInflater();
                // toastborder 파일 만들기
                View layout = inflater.inflate(R.layout.toastborder, (ViewGroup) findViewById(R.id.toast_layout_root));
                // 변수를 만들고 할당하면 이제 찾아 줄 수 있다. 텍스트뷰를 찾아서 캐스팅한다.
 
                TextView text = (TextView) layout.findViewById(R.id.text);
                //텍스트 뷰라고 하는것을 토스트 메시지로 사용하게 될것이다.
                
            }
        });
    }
}
cs

6. Toast메시지 위치를 바꿀수 있다는것 확인<결과>,Toast 메시지 모양또 바꿀 수 있음.(Button 추가)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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="com.example.example_toast.MainActivity">
 
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Toast 띄우기"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        tools:layout_editor_absoluteY="203dp" />
 
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="Toast 모양바꾸기"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button" />
</android.support.constraint.ConstraintLayout>
cs

8.app->layout->new ->layoutresourcefile -> Toastborder.xml 파일 만들기
id="@+id/toast_layout_root" 로 설정,TextView 생성 id = "@+id/text"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/toast_layout_root">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text"
        android:padding="20dp"
        android:textSize="40dp"/>
</LinearLayout>
cs
9. 이제 아까 layout만든것을 가져와서 설정 한다. 


1
2
3
4
5
6
7
8
9
10
11
TextView text = (TextView) layout.findViewById(R.id.text);
//텍스트 뷰라고 하는것을 토스트 메시지로 사용하게 될것이다.
 
text.setText("모양을 바꾼텍스트");
 
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER,0,-100);            // gravity 설정,offset
toast.setDuration(toast.LENGTH_LONG);               //
toast.setView(layout);          // layout 을 가져와서 세팅하겠다.
 
toast.show();
cs

10. app -> res -> drawble -> toast.xml 파일 생성
<shape 속성> 이미지가 아니라 이미지나 색상 모양을 그대로 보여줄 수 있음.
toast.xml파일은 배경을 직접 자기가 만들어서 지정 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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="#ffffff00" />
    <solid
            android:color="#ff883300"/>
    <padding
            android:bottom="20dp"
            android:left="20dp"
            android:right="20dp"
            android:top="20dp"/>
    <corners
        android:radius="15dp"/>
 
</shape>
cs

11. toast.xml파일을 배경이라고 생각하고 toastborder.xml에서 이것을 참조해서 직접 사용 할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/toast_layout_root">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text"
        android:padding="20dp"
        android:textSize="40dp"
        android:background="@drawable/toast"
        />
</LinearLayout>
cs

12. SnackBar 사용해보기

- toast와 별반차이가 없지만 외부라이브러리에 있다.

- File -> Project Structure -> app -> Dependencies 탭 -> +누르고 -> library Dependency (com.android.support.disign:26.00-alpha1) 추가

- 이것은 build.gradle 파일에 자동으로 들어간다.


1
2
3
4
5
6
7
8
9
10
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:design:26.0.0-alpha1' // 25.+
}
cs


13. 메인 엑티비티에 버튼 하나더 추가시키기

1
2
3
4
5
6
7
8
9
10
11
12
Button button3 = (Button) findViewById(R.id.button3);
 
button3.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Snackbar.make(v,"스낵바 입니다",Snackbar.LENGTH_LONG).show();
        // 디자인이라는 외부라이브러리 사용하면 밑에서부터 스낵바가 올라오게 된다.
        
 
 
    }
});
cs

  • <결과>




공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함