티스토리 뷰
#버튼 클릭하여 토스트메시지 띄우기
이제 버튼을 만들어서 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(); } }
|
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(); }
} }
|
이렇게 처리하고 실행하면 다른 이벤트가 처리되는 것을 확인할 수 있다.
그러면 버튼을 눌렀을 때 전화를 거는 화면이 뜨도록 해보자.
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(); }
} } |
실행을 하면 아래와 같다.
#버튼의 텍스트를 토스트메시지로 띄우기
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>
|
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(); } });
} }
|
코드가 너무 길다….. 아래처럼 바꿔서 적어보자. clickListener도 마찬가지로 익명클래스이다. 그리고 이 clickListener를 setOnClickListener에 주면 끝이다.
너무 간편하다.
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) + "" );
}
};
이렇게 바꿔준다. 그리고 실행하면 아래처럼 잘 된다!
'프로그래밍 > 안드로이드' 카테고리의 다른 글
Activity 간 데이터 넘기기 실습 (0) | 2016.06.08 |
---|---|
안드로이드 어플리케이션을 구성하는 4대 요소- 액티비티 (1) | 2016.06.08 |
안드로이드 개념 (1) | 2016.06.07 |
안드로이드 첫 프로젝트 Hello World (0) | 2016.06.07 |
Android Studio 설치 (0) | 2016.06.07 |
- Total
- Today
- Yesterday
- Erwin
- 배열
- 뒤로가기 버튼
- 메뉴바에 버튼 생성하기
- 제이쿼리
- activity
- spring
- 메소드
- 쿼리
- sql
- 포스팅하기
- mongo db
- facebook 연동
- 뉴스피드 가져오기
- intent
- 예외처리
- mybatis
- 글쓰기 버튼
- 자바프로그래밍
- aop
- 게시판 만들기
- jQuery
- 클래스
- JSP
- Linear Layout
- MVC
- er다이어그램
- Relative Layout
- ERD
- query
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |