일단 간단한 View를 만들어 보도록하자.
<?xml version="1.0" encoding="utf-8"?>
<!--activity_main.xml-->
<LinearLayout 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.jiharu.myapp.MainActivity"
android:orientation="vertical">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.00"
android:text="Button" />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.00"
android:gravity="center"
android:text="TextView" />
</LinearLayout>
위와 같은 코드를 작성하자. 물론 일일히 다 작성안하고 design에서 바꿀수도 있다.
이러한 코드를 작성했다고 치자. 여기서 중요한건 얘들은 실행해봐야 껍데기라는 것이다.
따라서 xml을 사용하는 클래스에 이벤트를 부여해줘야한다.
위에 자세히보면 레이아웃에 이 구문이 있다.
tools:context="com.jiharu.myapp.MainActivity"
이것은 해당 클래스에서 이 레이아웃을 사용한다는 이야기이다.
따라서 해당 클래스(이하 액티비티라고 하겠다.)에 연결해야한다.
/*MainActivity.java*/
package com.jiharu.myapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
해당 액티비티는 일단 아무것도 내용에 없다.
onCreate는 안드로이드가 켜지는 순간 작동하는 메소드이므로 이 메소드를 수정하면된다.
setContentView라는 메소드에 activity_main이 보인다.
자바에서는 xml이, xml에서는 자바가 서로 연결되어 있음을 이 코드를 통해서 확인할 수 있다.
일단 가장 먼저 해야할일은 껍데기뿐인 버튼과 텍스트뷰를 불러오는 것이다.
그 예제는 아래와 같다.
/*MainActivity.java*/
package com.jiharu.myapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.button);
TextView tv = (TextView) findViewById(R.id.textView);
}
}
findViewById메소드를 선언하면 해당 xml의 요소들을 불러 올 수 있다.
이때 중요한건 id를 통해서 불러오는 것이다. 해당 위젯의 id는 여러분이 만든 xml에서 확인할 수 있다.
이제 연결이 끝났다. 가볍게 이벤트를 붙히면 완성인데 버튼을 누른 횟수를 텍스트뷰에 표시되게 해보자.
/*MainActivity.java*/
package com.jiharu.myapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button btn = (Button) findViewById(R.id.button);
final TextView tv = (TextView) findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tv.setText(++count+"");
}
});
}
}
여기서 한가지 중요한건 반드시 setText메소드내부의 값은 문자열이여야한다.
문자열이 아니더라도 당장은 에러가 안나는데 실행하면 에러가 뜨면서 종료된다.
보다시피 버튼을 클릭할 때마다 숫자가 증가함을 볼 수 있다.
위의 코드는 익명함수를 사용하면 조금은 줄일 수 있다.
/*MainActivity.java*/
package com.jiharu.myapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button btn = (Button) findViewById(R.id.button);
final TextView tv = (TextView) findViewById(R.id.textView);
btn.setOnClickListener((View view)->{tv.setText(++count+"");});
}
}
익명함수는 바로 적용이 안되는데(되는 경우도 있다고 하는데 필자는 바로 된적이 없음) 적용을 시켜줘야한다.
'Programming > Java-Android' 카테고리의 다른 글
[Android-06]Toast (0) | 2017.12.01 |
---|---|
[Android-05]Event - Click,Touch (0) | 2017.12.01 |
[Android-04]Layout (0) | 2017.11.30 |
[Android-02]View를 Activity에 삽입하기 (0) | 2017.09.04 |
[Android-01]기본적인 프로젝트의 이해 (0) | 2017.09.03 |