티스토리 뷰

#버튼 클릭하여 토스트메시지 띄우기


이제 버튼을 만들어서 Toast 메시지를 띄워보자.



버튼을 만들고, 오른쪽 Properties 패널에서 onClick에 call 메소드를 설정한다.




그리고 MainActivity로 돌아와서 아래와 같이 코드를 작성한다.


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

package com.ktds.smahn.helloworld;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

   }

   public void call(View view){

       Toast.makeText(view.getContext(), "버튼을 눌렀습니다.", Toast.LENGTH_SHORT).show();

   }

}

Colored by Color Scripter

cs



Call 메소드를 보자. 파라메터타입으로 View가 넘어오는 것을 알 수 있다.


  • View란, 어떤 타입이든 넘어올 수 있는 최상위 타입이다.








#이벤트 제어하기


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

package com.ktds.smahn.helloworld;

       import android.os.Bundle;

       import android.support.v7.app.AppCompatActivity;

       import android.view.View;

       import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

   }

   public void call(View view){

       //안드로이드는 내부적으로 id를 숫자로 관리한다.

       int id = view.getId();

       // 그러면 개발자는 어떻게 String 값인 id를 숫자로 알까?

       // 컴포넌트를 추가하는 순간마다 id가 자동으로 생성된다.

       if( id == R.id.button ) {

           Toast.makeText(view.getContext(), "버튼을 눌렀습니다.", Toast.LENGTH_SHORT).show();

       }

       else if ( id == R.id.textView ) {

           Toast.makeText(view.getContext(), "텍스트를 눌렀습니다.", Toast.LENGTH_SHORT).show();

       }

   }

}

Colored by Color Scripter

cs


이렇게 처리하고 실행하면 다른 이벤트가 처리되는 것을 확인할 수 있다.






그러면 버튼을 눌렀을 때 전화를 거는 화면이 뜨도록 해보자.


Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("tel:010-3333-4444"));

startActivity(intent);



이걸 추가하면 된다. 전체 코드는 아래와 같다.



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

package com.ktds.smahn.helloworld;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

   }

   public void call(View view){

       //안드로이드는 내부적으로 id를 숫자로 관리한다.

       int id = view.getId();

       // 그러면 개발자는 어떻게 String 값인 id를 숫자로 알까?

       // 컴포넌트를 추가하는 순간마다 id가 자동으로 생성된다.

       if( id == R.id.button ) {

           Toast.makeText(view.getContext(), "버튼을 눌렀습니다.", Toast.LENGTH_SHORT).show();

           //전화를 거는 화면을 띄움

           Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("tel:010-3333-4444"));

           startActivity(intent);

       }

       else if ( id == R.id.textView ) {

           Toast.makeText(view.getContext(), "텍스트를 눌렀습니다.", Toast.LENGTH_SHORT).show();

       }

   }

}

Colored by Color Scripter

cs



실행을 하면 아래와 같다.






#버튼의 텍스트를 토스트메시지로 띄우기


1. 버튼을 만든다.




<Button

  style="?android:attr/buttonStyleSmall"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:text="1"

  android:id="@+id/btn1"

  android:layout_below="@+id/button"

  android:layout_alignParentLeft="true"

  android:layout_alignParentStart="true" />



2. 코드를 작성한다.




  • setOnClickListener : 클릭 이벤트

  • new View.OnClickListener() : 인터페이스나 추상클래스는 절대 객체화 시킬 수 없다. 객체화시키려면 반드시 구체적인것이 필요하다. 그런데 얘는 객체화시켰다. 그랬더니 바로 @Override 되면서 익명클래스(Anonymous Class)가 생성된다.

  • ② 익명클래스 : 안드로이드에서 많이 쓰인다. Spring에서도 많이 쓰인다.  Template Callback 이라고 부른다. 회사마다 용어가 다르므로, 다 알고 있는것이 좋다. (익명클래스, 템플릿 콜백, 무명클래스, 어나니머스 클래스 모두 다 같은말이다)

  • Template Callback : http://kimddochi.tistory.com/71 참고

  • ③ 새로운 클래이므로, button1을 인지하지 못한다. 따라서 상수화가 필요하다. →  final

  • 사실은 1.8 부터는 final을 붙일 필요가 없다. 적어주지 않아도 자동으로 처리 되는데, final을 적으면 안전하게 갈 수 있다.

  • ④ 클릭된 그것, 즉 button1이 넘어온다.

  • button1.getText() 하면 1이 넘어온다. ((Button) v).getText() 와 동일하다.



메소드의 전체 구조는 다음과 같다. 이 구조가 제일 많이 쓰이므로 외워두는게 좋다.



@Override

protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);


   final Button button1 = (Button) findViewById(R.id.btn1);


  button1.setOnClickListener(new View.OnClickListener() {

      @Override

      public void onClick(View v) {

          Toast.makeText(v.getContext(), button1.getText(), Toast.LENGTH_SHORT).show();

      }

  });

}








#버튼 10개를 만들어 버튼텍스트를 토스트로 띄우기


1. Activity_main.xml 작성


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

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

   xmlns:tools="http://schemas.android.com/tools"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   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.ktds.smahn.buttonclick.MainActivity">

   <Button

       style="?android:attr/buttonStyleSmall"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="1"

       android:id="@+id/button1"

       android:layout_alignParentTop="true"

       android:layout_alignParentLeft="true"

       android:layout_alignParentStart="true"

       android:layout_marginTop="40dp" />

   <Button

       style="?android:attr/buttonStyleSmall"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="2"

       android:id="@+id/button2"

       android:layout_alignTop="@+id/button1"

       android:layout_centerHorizontal="true" />

   <Button

       style="?android:attr/buttonStyleSmall"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="3"

       android:id="@+id/button3"

       android:layout_alignTop="@+id/button2"

       android:layout_alignParentRight="true"

       android:layout_alignParentEnd="true" />

   <Button

       style="?android:attr/buttonStyleSmall"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="4"

       android:id="@+id/button4"

       android:layout_below="@+id/button1"

       android:layout_alignParentLeft="true"

       android:layout_alignParentStart="true"

       android:layout_marginTop="42dp" />

   <Button

       style="?android:attr/buttonStyleSmall"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="5"

       android:id="@+id/button5"

       android:layout_alignTop="@+id/button4"

       android:layout_alignLeft="@+id/button2"

       android:layout_alignStart="@+id/button2" />

   <Button

       style="?android:attr/buttonStyleSmall"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="6"

       android:id="@+id/button6"

       android:layout_alignTop="@+id/button4"

       android:layout_alignParentRight="true"

       android:layout_alignParentEnd="true" />

   <Button

       style="?android:attr/buttonStyleSmall"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="7"

       android:id="@+id/button7"

       android:layout_below="@+id/button4"

       android:layout_alignParentLeft="true"

       android:layout_alignParentStart="true"

       android:layout_marginTop="68dp" />

   <Button

       style="?android:attr/buttonStyleSmall"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="8"

       android:id="@+id/button8"

       android:layout_above="@+id/button0"

       android:layout_alignLeft="@+id/button5"

       android:layout_alignStart="@+id/button5" />

   <Button

       style="?android:attr/buttonStyleSmall"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="9"

       android:id="@+id/button9"

       android:layout_alignTop="@+id/button7"

       android:layout_alignParentRight="true"

       android:layout_alignParentEnd="true" />

   <Button

       style="?android:attr/buttonStyleSmall"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="0"

       android:id="@+id/button0"

       android:layout_marginTop="57dp"

       android:layout_below="@+id/button7"

       android:layout_alignParentLeft="true"

       android:layout_alignParentStart="true" />

</RelativeLayout>

Colored by Color Scripter

cs



2. MainActivity.java 작성


아래 전체 코드를 보자. 이렇게 하면


@Override

public void onClick(View v) {

  Toast.makeText(v.getContext(), ((Button) v).getText(),Toast.LENGTH_SHORT).show();

}



이 부분이 계속 반복되므로, 통합시켜서 코드를 짧게 만들어주어야 한다.

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

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

package com.ktds.smahn.buttonclick;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.Button;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

       final Button button1 = (Button) findViewById(R.id.button1);

       final Button button2 = (Button) findViewById(R.id.button2);

       final Button button3 = (Button) findViewById(R.id.button3);

       final Button button4 = (Button) findViewById(R.id.button4);

       final Button button5 = (Button) findViewById(R.id.button5);

       final Button button6 = (Button) findViewById(R.id.button6);

       final Button button7 = (Button) findViewById(R.id.button7);

       final Button button8 = (Button) findViewById(R.id.button8);

       final Button button9 = (Button) findViewById(R.id.button9);

       final Button button0 = (Button) findViewById(R.id.button0);

       button1.setOnClickListener(new View.OnClickListener(){

           @Override

           public void onClick(View v) {

               Toast.makeText(v.getContext(), ((Button) v).getText(),Toast.LENGTH_SHORT).show();

           }

       });

       button2.setOnClickListener(new View.OnClickListener(){

           @Override

           public void onClick(View v) {

               Toast.makeText(v.getContext(), ((Button) v).getText(),Toast.LENGTH_SHORT).show();

           }

       });

       button3.setOnClickListener(new View.OnClickListener(){

           @Override

           public void onClick(View v) {

               Toast.makeText(v.getContext(), ((Button) v).getText(),Toast.LENGTH_SHORT).show();

           }

       });

       button4.setOnClickListener(new View.OnClickListener(){

           @Override

           public void onClick(View v) {

               Toast.makeText(v.getContext(), ((Button) v).getText(),Toast.LENGTH_SHORT).show();

           }

       });

       button5.setOnClickListener(new View.OnClickListener(){

           @Override

           public void onClick(View v) {

               Toast.makeText(v.getContext(), ((Button) v).getText(),Toast.LENGTH_SHORT).show();

           }

       });

       button6.setOnClickListener(new View.OnClickListener(){

           @Override

           public void onClick(View v) {

               Toast.makeText(v.getContext(), ((Button) v).getText(),Toast.LENGTH_SHORT).show();

           }

       });

       button7.setOnClickListener(new View.OnClickListener(){

           @Override

           public void onClick(View v) {

               Toast.makeText(v.getContext(), ((Button) v).getText(),Toast.LENGTH_SHORT).show();

           }

       });

       button8.setOnClickListener(new View.OnClickListener(){

           @Override

           public void onClick(View v) {

               Toast.makeText(v.getContext(), ((Button) v).getText(),Toast.LENGTH_SHORT).show();

           }

       });

       button9.setOnClickListener(new View.OnClickListener(){

           @Override

           public void onClick(View v) {

               Toast.makeText(v.getContext(), ((Button) v).getText(),Toast.LENGTH_SHORT).show();

           }

       });

       button0.setOnClickListener(new View.OnClickListener(){

           @Override

           public void onClick(View v) {

               Toast.makeText(v.getContext(), ((Button) v).getText(),Toast.LENGTH_SHORT).show();

           }

       });

   }

}

Colored by Color Scripter

cs



코드가 너무 길다….. 아래처럼 바꿔서 적어보자. clickListener 마찬가지로 익명클래스이다. 그리고 이 clickListenersetOnClickListener에 주면 끝이다.

너무 간편하다.



View.OnClickListener clickListener = new View.OnClickListener() {

  @Override

  public void onClick(View v) {

      Toast.makeText(v.getContext(), ((Button) v).getText(),Toast.LENGTH_SHORT).show();

  }

};


button1.setOnClickListener(clickListener);

button2.setOnClickListener(clickListener);

button3.setOnClickListener(clickListener);

button4.setOnClickListener(clickListener);

button5.setOnClickListener(clickListener);

button6.setOnClickListener(clickListener);

button7.setOnClickListener(clickListener);

button8.setOnClickListener(clickListener);

button9.setOnClickListener(clickListener);

button0.setOnClickListener(clickListener);


각각 버튼을 클릭하면 토스트 메시지가 잘 뜰 것이다.








#버튼을 클릭하면 Textview에 버튼의 텍스트 보여주기

1. Activity_main.xml 에 textview 넣기




Text는 0으로 준다.




2. MainActivity.java 수정

  • Toast를 띄워주는게 아니라, id가 textview인 것에 글자를 붙여 넣어주어야 한다.


2-1. Textview 가져오기


final TextView textview = (TextView) findViewById(R.id.textView);




2-2. Textview에 text 세팅하기


View.OnClickListener clickListener = new View.OnClickListener() {

  @Override

  public void onClick(View v) {

      //Toast.makeText(v.getContext(), ((Button) v).getText(),Toast.LENGTH_SHORT).show();

      textview.setText( ((Button) v).getText() );

  }

};




안드로이드에는 String이 없다. String의 원형으로 CharSequence가 있다. 얘를 쓰면 된다.

그런데 지금은 숫자가 붙어나오지 않고 클릭될때마다 숫자가 변한다.




2-3. 현재값에 더해주기


View.OnClickListener clickListener = new View.OnClickListener() {

  @Override

  public void onClick(View v) {

      //Toast.makeText(v.getContext(), ((Button) v).getText(),Toast.LENGTH_SHORT).show();

      String text = (String) textview.getText();

      text += ((Button)v).getText();


      // 앞에 0이 들어가면 빼기 위해서 Integer.parseInt(text)

      textview.setText( Integer.parseInt(text) + "" );

  }

};




이렇게 바꿔준다. 그리고 실행하면 아래처럼 잘 된다!



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함