본문 바로가기

안드로이드

이벤트 처리2

에디트 텍스트


<?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.jiyeon.myapplication.MainActivity">

<EditText
android:id="@+id/edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</RelativeLayout>



package com.jiyeon.myapplication;

import android.app.Activity;
...

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final EditText edittext = (EditText)findViewById(R.id.edittext);
edittext.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {

//이벤트가 키다운이고 엔터키가 입력되면
if((event.getAction() == KeyEvent.ACTION_DOWN)
&&(keyCode == KeyEvent.KEYCODE_ENTER)){
Toast.makeText(getApplicationContext(),edittext.getText(),Toast.LENGTH_SHORT).show();

return true;
}
return false;
}
});
}
}


**알고가기

변수에 final을 붙여서 상수로 만든 이유

위의 소스에서 edittext 지역 변수가 final로 선언된 이유는 내부의 무명 클래스에서 이 변수를 참조하기 때문이다.

내부 클래스에서 접근하는 외부 지역 변수는 반드시 final이어야 한다. 아니면 그 변수가 가르키는 객체가 바뀌지 않는다는 보장이 있어야한다. 만약 final을 지정하지 않으면 다음과 같은 오류 메세지가 표시된다. 

Cannot refer to a non-final variable value inside an inner class defined in a different method





체크박스


<?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.jiyeon.myapplication.MainActivity">

<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="check it out"
/>
</RelativeLayout>



package com.jiyeon.myapplication;

import android.app.Activity;
...

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final CheckBox checkbox = (CheckBox)findViewById(R.id.checkbox);
checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//체크 박스가 클릭되면 호출된다. 체크 여부를 확인한다.
if(((CheckBox) v).isChecked()){
Toast.makeText(getApplicationContext(),"selected",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(),"not selected",Toast.LENGTH_SHORT).show();
}
}
});
}
}


**알고가기

onClick()으로 전달된 매개 변수 v를 CheckBox로 형변환한 것에 유의해야한다. 왜냐하면 isChecked() 메소드는 부모 클래스인 View에는 없는 메소드이다. 체크 박스는 상태 변경을 스스로 처리하기 때문이다. 만약 체크 박스를 강제적으로 변경하게 하려면 setChecked(boolean)나 toggle() 메소드를 사용하면 된다.





라디오 버튼


- 두개의 클래스를 이용한다. 

- 하나는 RadioButton으로 라디오 버튼을 생성하는데 사용하는데 부모가 TextView 클래스여서 속성 사용 할 수 있다.

- 또 하나의 클래스는 RadioGroup으로 라디오 버튼들을 그룹핑하는 데 사용한다.


메소드

설명 

 void toggle()

 선택 상태를 현재의 반대로 변경한다. 



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context="com.jiyeon.myapplication.MainActivity">

<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton
android:id="@+id/radio_red"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Red" />
<RadioButton
android:id="@+id/radio_blue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Blue" />
</RadioGroup>
</LinearLayout>



package com.jiyeon.myapplication;

import android.app.Activity;
...

public class MainActivity extends Activity {

private View.OnClickListener radio_listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
//클릭되면 호출된다.
RadioButton rb = (RadioButton) v;
Toast.makeText(getApplicationContext(),rb.getText(),Toast.LENGTH_SHORT).show();
}
};


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final RadioButton red = (RadioButton)findViewById(R.id.radio_red);
final RadioButton blue = (RadioButton)findViewById(R.id.radio_blue);
red.setOnClickListener(radio_listener);
blue.setOnClickListener(radio_listener);


}
}





토큰 버튼



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

<LinearLayout 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:orientation="vertical"
tools:context="com.jiyeon.myapplication.MainActivity">

<ToggleButton
android:id="@+id/toglebutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="Vibrate on"
android:textOff="Vibrate off"/>
</LinearLayout>




package com.jiyeon.myapplication;

import android.app.Activity;
...

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final ToggleButton toggleButton = (ToggleButton)findViewById(R.id.toglebutton);
toggleButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(toggleButton.isChecked()){
Toast.makeText(getApplicationContext(),"checked",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(),"not checked",Toast.LENGTH_SHORT).show();
}
}
});


}
}





커스텀 버튼(custom button)

- 버튼이 눌렀을 때 이미지가 변경되는 버튼을 작성하고 싶을때 사용




'안드로이드' 카테고리의 다른 글

apk 파일 디컴파일 하기  (0) 2016.04.08
액티비티와 인텐트  (0) 2016.04.03
이벤트 처리  (0) 2016.03.31
레이아웃  (0) 2016.03.31
사용자 인터페이스 (UI) 기초  (0) 2016.03.31