*해당 포스팅은 커넥트재단의 edwith-[부스트코스]안드로이드 프로그래밍의 강의 자료를 바탕으로 작성되었습니다.
OnClickListener메소드를 사용하면 버튼클릭시 함수가 자동으로 호출됩니다. 이벤트의 종류는 터치이벤트, 클릭이벤트, 키이벤트등 다양하게 있습니다.
public class MainActivity extends AppCompatActivity {
TextView textView;
View view1;
View view2;
GestureDetector Detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textview);
view1 = findViewById(R.id.view1);
view1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
float curX = event.getX();
float curY = event.getY();
// ACTION으로 사용
if (action == MotionEvent.ACTION_DOWN){ //누를때 이벤트
println("손가락 눌렀음: " + curX + "," +curY);
}
else if (action == MotionEvent.ACTION_UP){ //땔때 이벤트
println("손가락 땜: " + curX + "," +curY);
}
else if (action == MotionEvent.ACTION_MOVE){ //드래그 이벤트
println("손가락 움직임: " + curX + "," +curY);
}
return true;
}
});
view2 = findViewById(R.id.view2);
//메소드로 사용
Detector = new GestureDetector(this, new GestureDetector.OnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
println("onDown");
return true;
}
@Override
public void onShowPress(MotionEvent e) {
println("onshow");
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
println("onsingle");
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
println("onscroll" + distanceX + ","+distanceY);
return true;
}
@Override
public void onLongPress(MotionEvent e) {
println("onlong");
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
println("onfling"+","+velocityX + velocityY);
return true;
}
});
view2.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Detector.onTouchEvent(event);
return true;
}
});
}
// 취소버튼
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Toast.makeText(this, "시스템 BACK 버튼 눌림.", Toast.LENGTH_LONG).show();
return true;
}
return false;
}
public void println(String a){
textView.append( a + "\n");
}
}
ACTION변수를 사용하여 이벤트를 호출하는 방법이 있고 메소드를 호출하여 사용하는 방법이 있습니다. ACTION_DOWN은 손가락으로 누르고 있을때 발동되고 ACTION_UP은 땔때, ACTION_MOVE은 드래그 할때 발동됩니다.메소드는 onDown,onScroll,onLongPress등 있으며 누를때 , 스크롤 할 때, 길게 누를때 호출됩니다. KEYCODE_BACK은 취소버튼을 누를 때 호출됩니다.
토스트는 간단한 메시지를 잠깐 보여주었다가 없어지는 뷰입니다. 앱 개발을 하다보면 중간에 디버깅을 하기위해 메세지를 출력해보고 싶은 경우에 자주 사용합니다. 토스트 메세지는 다음과 같은 코드형태로 많이 사용합니다.
Toast.makeText(Context context, String message, int duration).show();
스낵바는 아래쪽에서 잠깐 올라왔다가 사라지는 뷰입니다. 토스트랑 차이점은 토스트는 앱화면에 종속되지 않지만, 스낵바는 앱 화면에서 보여줍니다. 보통 경고상태, 긴급상태 등 알림으로 많이 쓰입니다.
<예시>
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 v) {
Toast toast = Toast.makeText(getApplicationContext(),"위치가 바뀐 토스트",Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP|Gravity.LEFT,200,250);
toast.show();
}
});
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast, (ViewGroup)findViewById(R.id.toast_layout_root));
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("모양을 바꾼 토스트");
Toast toast2 = new Toast(getApplicationContext());
toast2.setGravity(Gravity.CENTER,0,100);
toast2.setDuration(Toast.LENGTH_LONG);
toast2.setView(layout);
toast2.show();
}
});
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();
}
});
}
}
토스트와 스낵바는 모양도 바꿀수 있는데 이는 inflater를 사용해서 바꿀수 있습니다. inflater는 차후에 다루도록 하겠습니다.
알림 대화상자는 사용자에게 어떤 내용을 알려주거나 '아니오', '예' 버튼을 선택하도록 만들고 싶을 때 사용됩니다.
AlertDialog 객체를 만들고 show 메소드를 이용해 화면에 표시하게 됩니다. 보통 안내 메세지, 타이틀등에 쓰입니다.
public class MainActivity extends AppCompatActivity {
TextView taa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
taa = (TextView)findViewById(R.id.textView);
Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showmessage();
}
});
}
public void showmessage(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("안내");
builder.setMessage("종료하시겠습니까?");
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setPositiveButton("예", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Snackbar.make(taa,"예를 눌렀어용",Snackbar.LENGTH_LONG).show();
}
});
builder.setNegativeButton("아니요", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Snackbar.make(taa,"아니요 눌렀쪙",Snackbar.LENGTH_LONG).show();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
}
2주차는 내용이 많아 인플레이션과 리스튜뷰는 2부에 걸쳐서 진행하겠습니다.
[Android Studio] 5-1. 네트워킹 (0) | 2020.02.27 |
---|---|
[Android Studio] 3. 화면 여러 개 만들기 (0) | 2020.02.16 |
[Android Studio] 2-2.인플레이션과 리스트뷰 (0) | 2020.02.16 |
[Android Studio] 1.레이아웃 만들기 (0) | 2020.02.15 |
댓글 영역