@Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle("자바 코드로 레이아웃 생성"); // 레이아읏이 설정된 activity_main.xml 파일을 표시하지 않도록 주석 처리 // setContentView(R.layout.activity_main); }
Ctrl + P 하면 어떤 매개변수 값을 받는지 볼 수 있다
// 자바 코드를 사용하여 LinearLayout 생성 // 1. LayoutParams 객체를 생성하여 LinearLayout 에 필요한 필수 속성 파라미터 설정 // => layout_width 속성과 layout_height 속성에 대한 설정 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( // layout_width, layout_height 속성을 순서대로 지정 // => LinearLayout.LayoutParams.상수명 을 사용하여 속성 값 지정 가능 LinearLayout.LayoutParams.MATCH_PARENT, // layout_width"match_parent" 와 동일 LinearLayout.LayoutParams.MATCH_PARENT // layout_height="match_parent" 와 동일 );
Context 나오면 보통 나 자신을 가리킴(=this)
orientation 넣어보기
값을 뭐 넣을지 모를땐 클래스명. 찍어보기!
안드로이드에서는 그냥 Ctrl + Space 해도 됨!
선택하면 자동으로 클래스명 붙음
> 백그라운드 색상
layout.setBackgroundColor(Color.BLUE);
layout.setBackgroundColor(Color.rgb(0,0,255)); // 여기선 16진수 말고 10진수
두 가지 다 가능! 여기선 16진수 #0000FF 가 아닌 10진수 사용 rgb(0,0,255)
> 4. setContentView() 메서드를 호출하여 레이아웃 표시
params 는 생략가능하지만, Linear 에서는 생략 불가!
@Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle("자바 코드로 레이아웃 생성"); // 레이아읏이 설정된 activity_main.xml 파일을 표시하지 않도록 주석 처리 // setContentView(R.layout.activity_main); // 자바 코드를 사용하여 LinearLayout 생성 // 1. LayoutParams 객체를 생성하여 LinearLayout 에 필요한 필수 속성 파라미터 설정 // => layout_width 속성과 layout_height 속성에 대한 설정 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( // layout_width, layout_height 속성을 순서대로 지정 // => LinearLayout.LayoutParams.상수명 을 사용하여 속성 값 지정 가능 LinearLayout.LayoutParams.MATCH_PARENT, // layout_width"match_parent" 와 동일 LinearLayout.LayoutParams.MATCH_PARENT // layout_height="match_parent" 와 동일 ); // 2. LinearLayout 객체 생성 // => 생성자 파라미터에 현재 액티비티(컨텍스트 객체)를 전달 // 1) this 2) 액티비티클래스명.this 3) getApplicationContext() 중 택 1 LinearLayout layout = new LinearLayout(this); // 3. 생성된 LinearLayout 객체의 메서드들을 호출하여 각종 속성 설정 layout.setOrientation(LinearLayout.VERTICAL); // 레이아웃 색상 설정 => 주의! setBackground() 메서드가 아닌 setBackgroundColor() 메서드사용 layout.setBackgroundColor(Color.BLUE); layout.setBackgroundColor(Color.rgb(0,0,255)); // 여기선 16진수 말고 10진수 // 4. setContentView() 메서드를 호출하여 레이아웃 표시 // => 파라미터로 생성된 레이아웃 객체 전달 setContentView(layout, params); }
> 실행화면
⇒ 자바로 잘 하진 않지만(xml 로 하는게 훨씬 편리하기 때문!), 자바로도 이렇게 만들 수 있다는 거 알아두기!
// 자바 코드를 사용하여 버튼 생성하여 레이아웃에 부착 // 1. Button 객체 생성(findViewId() 메서드가 아닌 new 사용) // => 파라미터로 현재 액티비티 객체(컨텍스트 객체) this 전달 Button btn = new Button(this); // 2. Button 객체의 메서드를 사용하여 버튼 속성 설정 // => width, height 값 생략 시 기본값은 width = match_parent, height = wrap_content 로 지정됨 btn.setText("버튼입니다"); btn.setBackgroundColor(Color.GREEN); // 3. 레이아웃 객체의 addView() 메서드를 호출하여 버튼 객체 전달 layout.addView(btn);
세로로 꽉 채우는 것(fill_vertical)과, 가로로 꽉 채우는 것(fill_horizontal)
<?xml version="1.0" encoding="utf-8"?> <GridLayout 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=".MainActivity" android:rowCount="2" android:columnCount="4"> <!-- TableLayout 또는 GridLayout 등은 위젯 추가 시 width, height 값 필요없음 단, 실제 디자인 시 보다 깔끔한 디자인을 위해서는 위젯의 width, height 값을 수치(dp)로 직접 입력 --> <Button android:layout_row="0" android:layout_column="0" android:text="1" android:layout_rowSpan="2" android:layout_gravity="fill_vertical"/> <Button android:text="2" android:layout_row="0" android:layout_column="1" android:layout_columnSpan="2" android:layout_gravity="fill_horizontal"/> <Button android:layout_row="0" android:layout_column="3" android:text="3"/> <Button android:layout_row="1" android:layout_column="1" android:text="4"/> <Button android:layout_row="1" android:layout_column="2" android:text="5"/> <Button android:layout_row="1" android:layout_column="3" android:text="6"/> </GridLayout>
android:layout_row="X"
android:layout_column="X" 다 달아주기(디자인 탭에서 늘릴 경우 빈 칸들이 생기기때문에 자리를 지정해주는 게 좋음!)
EditText etNum1, etNum2; Button btnAdd, btnSub, btnMul, btnDiv; TextView tvResult; // Button btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9; // 숫자 버튼 10개 관리하는 다른 방법 - 배열을 사용하여 숫자버튼에 대한 ID 관리 Button[] btnNums = new Button[10]; // Button 위젯의 객체를 저장할 Button 타입 배열 생성 // Button 위젯에 대한 ID 를 저장할 int 형 배열 생성 int[] btnNumsIds = { // 10개의 Button 에 대한 ID 를 배열에 직접 저장 R.id.btn0, R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9 };
버튼만 따로
package com.example.a0616_ch05_p50_test_5_5; importandroidx.appcompat.app.AppCompatActivity; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.Button; importandroid.widget.EditText; importandroid.widget.TextView; importandroid.widget.Toast; public class MainActivity extends AppCompatActivity { EditText etNum1, etNum2; Button btnAdd, btnSub, btnMul, btnDiv; TextView tvResult; // Button btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9; // 숫자 버튼 10개 관리하는 다른 방법 - 배열을 사용하여 숫자버튼에 대한 ID 관리 Button[] btnNums = new Button[10]; // Button 위젯의 객체를 저장할 Button 타입 배열 생성 // Button 위젯에 대한 ID 를 저장할 int 형 배열 생성 int[] btnNumsIds = { // 10개의 Button 에 대한 ID 를 배열에 직접 저장 R.id.btn0, R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9 }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnAdd = findViewById(R.id.btnSum); btnSub = findViewById(R.id.btnMin); btnMul = findViewById(R.id.btnMul); btnDiv = findViewById(R.id.btnDiv); etNum1 = findViewById(R.id.et1); etNum2 = findViewById(R.id.et2); tvResult = findViewById(R.id.tv1); // 숫자 Button 위젯 10개에 대한 ID 가져오는 작업을 반복문으로 수행 for(int i = 0; i < btnNumsIds.length; i++) { // ID가 저장된 배열 크기를 조건식으로 사용 // Button 위젯의 ID 가 저장된 배열의 각 요소를 findViewById() 메서드에 전달하여 // 해당 ID 에 대한 위젯 객체를 Button 타입 배열의 각 요소에 저장 btnNums[i] = findViewById(btnNumsIds[i]); } // ----------------------------------------------------- // 숫자 버튼 클릭 시 EditText 에 숫자 표시를 위한 이벤트 처리 // => 숫자 버튼 클릭에 대한 작업이 동일하므로 반복문을 사용하여 동일 작업을 처리 for(int i = 0; i < btnNumsIds.length; i++) { btnNums[i].setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 현대 커서가 위치한 EditText 위젯을 판별 = isFocused() 메서드 활용 if(etNum1.isFocused()) { Toast.makeText(MainActivity.this, "숫자1 EditText 커서위치함!", Toast.LENGTH_SHORT).show(); } elseif(etNum2.isFocused()) { Toast.makeText(MainActivity.this, "숫자2 EditText 커서위치함!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "숫자입력창 선택 필수!", Toast.LENGTH_SHORT).show(); } } }); } } }
오류!!! i 가 빨간줄! 외부에 있는 변수이기 때문! 근데 외부의 i 는 for문에 있다,, for 문 안의 i를 final로 만들면 i 값이 안바뀌기 때문에 for 문의 i 값에 final 을 붙이면 안됨!
그래서 대신 저장할 변수 하나를 만들어줌
for(int i = 0; i < btnNumsIds.length; i++) { // 내부클래스에서 외부에 있는 변수에 접근 시 해당 변수가 final 이어야 한다. // 그러나, 반복문의 제어변수에 final 이 붙을 수 없으므로 // 반복문 제어변수 값을 대신 저장할 변수 1개 필요 final int index = i; btnNums[i].setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 현재 커서가 위치한 EditText 위젯을 판별 = isFocused() 메서드 활용 if(etNum1.isFocused()) { // Toast.makeText(MainActivity.this, "숫자1 EditText 커서위치함!", Toast.LENGTH_SHORT).show(); // EditText(etNum1) 의 숫자를 가져와서 클릭된 버튼의 숫자와 결합하여 표시 etNum1.setText(etNum1.getText().toString() + btnNums[index].getText()); } else if(etNum2.isFocused()) { Toast.makeText(MainActivity.this, "숫자2 EditText 커서위치함!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "숫자입력창 선택 필수!", Toast.LENGTH_SHORT).show(); } } }); }
주의할 점! onClick 안에 만들면 안됨! 위치 중요!
이제 누르는대로 작동함
>>>>
@Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnAdd = findViewById(R.id.btnSum); btnSub = findViewById(R.id.btnMin); btnMul = findViewById(R.id.btnMul); btnDiv = findViewById(R.id.btnDiv); etNum1 = findViewById(R.id.et1); etNum2 = findViewById(R.id.et2); tvResult = findViewById(R.id.tv1); // 숫자 Button 위젯 10개에 대한 ID 가져오는 작업을 반복문으로 수행 for(int i = 0; i < btnNumsIds.length; i++) { // ID가 저장된 배열 크기를 조건식으로 사용 // Button 위젯의 ID 가 저장된 배열의 각 요소를 findViewById() 메서드에 전달하여 // 해당 ID 에 대한 위젯 객체를 Button 타입 배열의 각 요소에 저장 btnNums[i] = findViewById(btnNumsIds[i]); } // ----------------------------------------------------- // 숫자 버튼 클릭 시 EditText 에 숫자 표시를 위한 이벤트 처리 // => 숫자 버튼 클릭에 대한 작업이 동일하므로 반복문을 사용하여 동일 작업을 처리 for(int i = 0; i < btnNumsIds.length; i++) { // 내부클래스에서 외부에 있는 변수에 접근 시 해당 변수가 final 이어야 한다. // 그러나, 반복문의 제어변수에 final 이 붙을 수 없으므로 // 반복문 제어변수 값을 대신 저장할 변수 1개 필요 finalint index = i; btnNums[i].setOnClickListener(new View.OnClickListener() { @Override publicvoid onClick(View v) { // 현재 커서가 위치한 EditText 위젯을 판별 = isFocused() 메서드 활용 if(etNum1.isFocused()) { // Toast.makeText(MainActivity.this, "숫자1 EditText 커서위치함!", Toast.LENGTH_SHORT).show(); // EditText(etNum1) 의 숫자를 가져와서 클릭된 버튼의 숫자와 결합하여 표시 etNum1.setText(etNum1.getText().toString() + btnNums[index].getText()); } elseif(etNum2.isFocused()) { // Toast.makeText(MainActivity.this, "숫자2 EditText 커서위치함!", Toast.LENGTH_SHORT).show(); etNum2.setText(etNum2.getText().toString() + btnNums[index].getText()); } else { Toast.makeText(MainActivity.this, "숫자입력창 선택 필수!", Toast.LENGTH_SHORT).show(); } } }); } View.OnClickListener listener = new View.OnClickListener() { @Override publicvoid onClick(View v) { // 숫자1 또는 숫자2 가 입력되지 않았을 경우 해당 숫자 입력 요청 수행 if(etNum1.length() == 0) { Toast.makeText(MainActivity.this, "숫자1 입력 필수!", Toast.LENGTH_SHORT).show();\ etNum1.requestFocus(); // 커서요청 return;// 현재 메서드 종료 } elseif(etNum2.length() == 0) { Toast.makeText(MainActivity.this, "숫자2 입력 필수!", Toast.LENGTH_SHORT).show();\ etNum2.requestFocus(); // 커서요청 return;// 현재 메서드 종료 } // switch~case 문을 사용하여 각 버튼 판별 switch(v.getId()) { // 클릭된 View 타입 객체의 ID 가져오기 // case 문을 사용하여 각 버튼의 ID 값과 비교 case R.id.btnSum : Toast.makeText(MainActivity.this, "더하기", Toast.LENGTH_SHORT).show(); break; case R.id.btnMin : Toast.makeText(MainActivity.this, "빼기", Toast.LENGTH_SHORT).show(); break; case R.id.btnMul : Toast.makeText(MainActivity.this, "곱하기", Toast.LENGTH_SHORT).show(); break; case R.id.btnDiv : Toast.makeText(MainActivity.this, "나누기", Toast.LENGTH_SHORT).show(); } } }; btnAdd.setOnClickListener(listener); btnSub.setOnClickListener(listener); btnDiv.setOnClickListener(listener); btnMul.setOnClickListener(listener); } }
return 과 break 필수!
> 최종코드
package com.example.a0616_ch05_p50_test_5_5; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; publicclass MainActivity extends AppCompatActivity { EditText etNum1, etNum2; Button btnAdd, btnSub, btnMul, btnDiv; TextView tvResult; // Button btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9; // 숫자 버튼 10개 관리하는 다른 방법 - 배열을 사용하여 숫자버튼에 대한 ID 관리 Button[] btnNums = new Button[10]; // Button 위젯의 객체를 저장할 Button 타입 배열 생성 // Button 위젯에 대한 ID 를 저장할 int 형 배열 생성 int[] btnNumsIds = { // 10개의 Button 에 대한 ID 를 배열에 직접 저장 R.id.btn0, R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9 }; @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnAdd = findViewById(R.id.btnSum); btnSub = findViewById(R.id.btnMin); btnMul = findViewById(R.id.btnMul); btnDiv = findViewById(R.id.btnDiv); etNum1 = findViewById(R.id.et1); etNum2 = findViewById(R.id.et2); tvResult = findViewById(R.id.tv1); // 숫자 Button 위젯 10개에 대한 ID 가져오는 작업을 반복문으로 수행 for(int i = 0; i < btnNumsIds.length; i++) { // ID가 저장된 배열 크기를 조건식으로 사용 // Button 위젯의 ID 가 저장된 배열의 각 요소를 findViewById() 메서드에 전달하여 // 해당 ID 에 대한 위젯 객체를 Button 타입 배열의 각 요소에 저장 btnNums[i] = findViewById(btnNumsIds[i]); } // ----------------------------------------------------- // 숫자 버튼 클릭 시 EditText 에 숫자 표시를 위한 이벤트 처리 // => 숫자 버튼 클릭에 대한 작업이 동일하므로 반복문을 사용하여 동일 작업을 처리 for(int i = 0; i < btnNumsIds.length; i++) { // 내부클래스에서 외부에 있는 변수에 접근 시 해당 변수가 final 이어야 한다. // 그러나, 반복문의 제어변수에 final 이 붙을 수 없으므로 // 반복문 제어변수 값을 대신 저장할 변수 1개 필요 finalint index = i; btnNums[i].setOnClickListener(new View.OnClickListener() { @Override publicvoid onClick(View v) { // 현재 커서가 위치한 EditText 위젯을 판별 = isFocused() 메서드 활용 if(etNum1.isFocused()) { // Toast.makeText(MainActivity.this, "숫자1 EditText 커서위치함!", Toast.LENGTH_SHORT).show(); // EditText(etNum1) 의 숫자를 가져와서 클릭된 버튼의 숫자와 결합하여 표시 etNum1.setText(etNum1.getText().toString() + btnNums[index].getText()); } elseif(etNum2.isFocused()) { // Toast.makeText(MainActivity.this, "숫자2 EditText 커서위치함!", Toast.LENGTH_SHORT).show(); etNum2.setText(etNum2.getText().toString() + btnNums[index].getText()); } else { Toast.makeText(MainActivity.this, "숫자입력창 선택 필수!", Toast.LENGTH_SHORT).show(); } } }); } View.OnClickListener listener = new View.OnClickListener() { @Override publicvoid onClick(View v) { // 숫자1 또는 숫자2 가 입력되지 않았을 경우 해당 숫자 입력 요청 수행 if(etNum1.length() == 0) { Toast.makeText(MainActivity.this, "숫자1 입력 필수!", Toast.LENGTH_SHORT).show(); etNum1.requestFocus(); // 커서요청 return; // 현재 메서드 종료 } elseif(etNum2.length() == 0) { Toast.makeText(MainActivity.this, "숫자2 입력 필수!", Toast.LENGTH_SHORT).show(); etNum2.requestFocus(); // 커서요청 return; // 현재 메서드 종료 } int num1 = Integer.parseInt(etNum1.getText().toString()); int num2 = Integer.parseInt(etNum2.getText().toString()); int result = 0; // switch~case 문을 사용하여 각 버튼 판별 switch(v.getId()) { // 클릭된 View 타입 객체의 ID 가져오기 // case 문을 사용하여 각 버튼의 ID 값과 비교 case R.id.btnSum : // Toast.makeText(MainActivity.this, "더하기", Toast.LENGTH_SHORT).show(); result = num1 + num2; break; case R.id.btnMin : // Toast.makeText(MainActivity.this, "빼기", Toast.LENGTH_SHORT).show(); result = num1 - num2; break; case R.id.btnMul : // Toast.makeText(MainActivity.this, "곱하기", Toast.LENGTH_SHORT).show(); result = num1 * num2; break; case R.id.btnDiv : // Toast.makeText(MainActivity.this, "나누기", Toast.LENGTH_SHORT).show(); if(num1 == 0) { Toast.makeText(MainActivity.this, "0으로 나눌 수 없음!", Toast.LENGTH_SHORT).show(); etNum1.requestFocus(); return; } else if(num2 == 0) { Toast.makeText(MainActivity.this, "0으로 나눌 수 없음!", Toast.LENGTH_SHORT).show(); etNum2.requestFocus(); return; } result = num1 / num2; } // Switch ~ case 문 // 연산 결과를 TextView 에 출력 tvResult.setText("계산 결과 : " + result); } }; btnAdd.setOnClickListener(listener); btnSub.setOnClickListener(listener); btnDiv.setOnClickListener(listener); btnMul.setOnClickListener(listener); } }
package com.example.a0616_ch06_chronometer_basic; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Chronometer; public class MainActivity extends AppCompatActivity { Button btnStart; Chronometer chronometer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnStart = findViewById(R.id.btnStart); chronometer = findViewById(R.id.chrono); btnStart.setOnClickListener(newView.OnClickListener() { @Override public void onClick(View v) { // START 버튼을 클릭 시 Button 텍스트를 판별 // 현재 텍스트가 START 일 경우 STOP 으로 변경 // 현재 텍스트가 STOP 일 경우 START 으로 변경 if(btnStart.getText().equals("START")) { btnStart.setText("STOP"); } elseif(btnStart.getText().equals("STOP")) { btnStart.setText("START"); } } }); } }
버튼 클릭 이벤트 추가
if(btnStart.getText().equals("START")) { btnStart.setText("STOP"); // chronometer 의 start() 메서드를 호출하여 타이머 가동 chronometer.start(); // 타이머 시작 chronometer.setTextColor(Color.RED); // 텍스트 색상을 빨간색으로 변경 } elseif(btnStart.getText().equals("STOP")) { btnStart.setText("START"); // chronometer 의 stop() 메서드를 호출하여 타이머 중지 chronometer.stop(); // 타이머 중지 chronometer.setTextColor(Color.BLUE); // 텍스트 색상을 파란색으로 변경 }
btnStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // START 버튼을 클릭 시 Button 텍스트를 판별 // 현재 텍스트가 START 일 경우 STOP 으로 변경 // 현재 텍스트가 STOP 일 경우 START 으로 변경 if(btnStart.getText().equals("START")) { btnStart.setText("STOP"); // START 버튼 클릭 시 크로노미터의 시각을 0분 0초로 초기화 chronometer.setBase(SystemClock.elapsedRealtime()); // 시간 초기화 // chronometer 의 start() 메서드를 호출하여 타이머 가동 chronometer.start(); // 타이머 시작 chronometer.setTextColor(Color.RED); // 텍스트 색상을 빨간색으로 변경 } elseif(btnStart.getText().equals("STOP")) { btnStart.setText("START"); // chronometer 의 stop() 메서드를 호출하여 타이머 중지 chronometer.stop(); // 타이머 중지 chronometer.setTextColor(Color.BLUE); // 텍스트 색상을 파란색으로 변경 } } });
package com.example.a0616_ch06_timepicker_basic; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TimePicker; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); finalTimePicker tPicker = findViewById(R.id.timePicker); Button btnPick = findViewById(R.id.btnPick); btnPick.setOnClickListener(newView.OnClickListener() { @Override public void onClick(View v) { int hour = tPicker.getHour(); int min = tPicker.getMinute(); Toast.makeText(MainActivity.this, hour + "시 " + min + "분", Toast.LENGTH_SHORT).show(); } }); } }
지금은 오류 뜨는데 무시하고 그냥 실행
우리는 롤리팝 버전(Lv21)이라 그런 거! 최소 마시멜로우(Lv23) 버전 이상은 되어야 실행된다
지금은 가상이라 그냥 실행되는거 실제 폰에서는 마시멜로우 이상 버전에만 실행
btnPick.setOnClickListener(new View.OnClickListener() { @Override publicvoid onClick(View v) { // 안드로이드 API 23(Mashmellow) 부터 사용 가능한 코드 // int hour = tPicker.getHour(); // int min = tPicker.getMinute(); // 만약, API Level 23 이전의 코드에서 사용 시 getCurrentXXX() 메서드 사용 inthour = tPicker.getCurrentHour(); intmin = tPicker.getCurrentMinute(); Toast.makeText(MainActivity.this, hour + "시 " + min + "분", Toast.LENGTH_SHORT).show(); } });
우린 Lollipop 버전이라 Deprecated 된 getCurrentXXX() 메서드 사용