안드로이드의 기본 위젯으로는 텍스트 뷰 와 버튼, 에디트 텍스트, 컴파운드 버튼, 이미지 뷰, 이미지 버튼이 있습니다.
텍스트 뷰는 텍스트를 보여주는 위젯으로서 문자열 형식으로 직접 입력하거나 @String/변수명 형식으로 지정한 후 String.xml파일에 지정할 수 있습니다.
텍스트뷰는 여러 속성을 가지고 있는데 글자의 색상을 지정하는 textColor속성, 글자의 크기를 나타내는 textSize속성, 글꼴을 지정하는 typeface속성, 글자의 스타일을 지정하는 textStyle속성, 강제로 한 줄만 표시하는 singleLine속성 등이 자주 사용됩니다. 이들은 xml파일에서 지정하여 사용 가능하지만 Java코드로도 속성을 바꿀 수 있으며 코드는 다음과 같습니다.
버튼과 에디트 텍스트의 경우에는 TextView 클래스를 상속받으므로 TextView와 비슷하게 사용 가능하다. 즉 텍스트뷰를 버튼으로 바꾸고 싶다면 TextView를 Button으로 바꾸면 됩니다.
Button의 경우 일반적인 모습은 다음과 같습니다.
<Button
android:id="@+id/button1"
android:text="확인"/>
Java 코드로 동작을 넣을 수 있고 선언 위젯 대입 클래스 정의는 아래와 같습니다.
Button button1; //변수선언 방법
button1 = (Button) findViewById(R.id.button1);//버튼에 위젯 대입(id연결)
button1.setOnclickListener(new View.OnClickListener(){
public void onClick(View v){
//동작 코드 입력
}
});
에디트 텍스트의 경우도 마찬가지로 TextView 클래스를 상속받으며 Java로 값을 넘기기 위한 사용자의 값을 입력받는 용도로 사용합니다. 일반적인 xml코드와 자바 코드는 다음과 같습니다.
<EditText
android:id = "@+id/edittext1" />
EditText edit1;//변수 선언
edit1 = (EditText) findViewById(R.id.edit1);//위젯 연결
String str1 = edit1.getText().toString();//값 가져오기
다음으로는 안드로이드 스튜디오 실습 4-1 코드와 실행결과입니다.
<?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=".MainActivity">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Edit1"
android:layout_margin="10dp"
android:hint="숫자1"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Edit2"
android:layout_margin="10dp"
android:hint="숫자2"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/BtnAdd"
android:layout_margin="10dp"
android:text="더하기"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/BtnSub"
android:layout_margin="10dp"
android:text="빼기"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/BtnMul"
android:layout_margin="10dp"
android:text="곱하기"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/BtnDiv"
android:layout_margin="10dp"
android:text="나누기"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/TextResult"
android:textSize="30dp"
android:textColor="#FF0000"
android:layout_margin="10dp"
android:text="계산결과 : "/>
</LinearLayout>
package com.example.ch4_4_1;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
//각 매개변수 설정
EditText edit1, edit2;
Button btnAdd, btnSub, btnMul, btnDiv;
TextView textResult;
String num1, num2;
Integer result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("초간단 계산기");//타이틀 설정
//변수 id 연결
edit1 = (EditText)findViewById(R.id.Edit1);
edit2 = (EditText)findViewById(R.id.Edit2);
btnAdd = (Button)findViewById(R.id.BtnAdd);
btnSub = (Button)findViewById(R.id.BtnSub);
btnMul = (Button)findViewById(R.id.BtnMul);
btnDiv = (Button)findViewById(R.id.BtnDiv);
textResult = (TextView)findViewById(R.id.TextResult);
//기능 추가
btnAdd.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
result = Integer.parseInt(num1) + Integer.parseInt(num2);
textResult.setText("계산 결과 : " + result.toString());
return false;
}
});
btnSub.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
result = Integer.parseInt(num1) - Integer.parseInt(num2);
textResult.setText("계산 결과 : " + result.toString());
return false;
}
});
btnMul.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
result = Integer.parseInt(num1) * Integer.parseInt(num2);
textResult.setText("계산 결과 : " + result.toString());
return false;
}
});
btnDiv.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
result = Integer.parseInt(num1) / Integer.parseInt(num2);
textResult.setText("계산 결과 : " + result.toString());
return false;
}
});
}
}
그리고 직접 풀어보기 4-3의 실행결과는 다음과 같습니다.
참고로 조건은 아래와 같습니다.
- 4-1에서 기능을 추가하거나 변경
- 터치가 아닌 클릭으로 변경
- 나머지 값 구하기 버튼 추가
- 값을 입력하지 않고, 버튼을 클릭할 때 오류 메시지를 토스트로 나타내기
- 실수 값 계산하기
- 0으로 나누면 토스트 메시지를 나타내고 계산하지 않기
여기 있는 코드는 참고를 하시면 되겠고 더 나은 답이 있으니 직접 만들어 보시면 되겠습니다.
activity.xml 코드입니다.
<?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=".MainActivity">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Edit1"
android:layout_margin="10dp"
android:hint="숫자1"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Edit2"
android:layout_margin="10dp"
android:hint="숫자2"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/BtnAdd"
android:layout_margin="10dp"
android:text="더하기"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/BtnSub"
android:layout_margin="10dp"
android:text="빼기"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/BtnMul"
android:layout_margin="10dp"
android:text="곱하기"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/BtnDiv"
android:layout_margin="10dp"
android:text="나누기"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/BtnRest"
android:layout_margin="10dp"
android:text="나머지값"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/TextResult"
android:textSize="30dp"
android:textColor="#FF0000"
android:layout_margin="10dp"
android:text="계산결과 : "/>
</LinearLayout>
MainActivity.java 코드입니다.
package com.example.ch4_4_3;
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;
public class MainActivity extends AppCompatActivity {
//각 매개변수 설정
EditText edit1, edit2;
Button btnAdd, btnSub, btnMul, btnDiv, btnRest;
TextView textResult;
String num1, num2;
Float result;
public boolean check(String num1, String num2){//빈 값인지 확인하는 매소드
if(num1.isEmpty() || num2.isEmpty()){//비어있는지 확인
return true;
}
if(num1.equals("") || num2.equals("")){//혹시나 몰라서 한번 더 확인
return true;
}
else{
return false;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("초간단 계산기(수정)");//타이틀 설정
//변수 id 연결
edit1 = (EditText)findViewById(R.id.Edit1);
edit2 = (EditText)findViewById(R.id.Edit2);
btnAdd = (Button)findViewById(R.id.BtnAdd);
btnSub = (Button)findViewById(R.id.BtnSub);
btnMul = (Button)findViewById(R.id.BtnMul);
btnDiv = (Button)findViewById(R.id.BtnDiv);
btnRest = (Button)findViewById(R.id.BtnRest);
textResult = (TextView)findViewById(R.id.TextResult);
//버튼 기능 추가
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
if(check(num1, num2)){
Toast.makeText(getApplicationContext(),"값을 입력하세요",Toast.LENGTH_LONG).show();//값이 비어있다면 오류 메시지 출력 아래도 같음
}
else{//정상이면 출력
result = Float.parseFloat(num1) + Float.parseFloat(num2);
textResult.setText("계산 결과 : " + result.toString());
}
}
});
btnSub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
if(check(num1, num2)){
Toast.makeText(getApplicationContext(),"값을 입력하세요",Toast.LENGTH_LONG).show();
}
else{
result = Float.parseFloat(num1) - Float.parseFloat(num2);
textResult.setText("계산 결과 : " + result.toString());
}
}
});
btnMul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
if(check(num1, num2)){
Toast.makeText(getApplicationContext(),"값을 입력하세요",Toast.LENGTH_LONG).show();
}
else{
result = Float.parseFloat(num1) * Float.parseFloat(num2);
textResult.setText("계산 결과 : " + result.toString());
}
}
});
btnDiv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
if(check(num1, num2)){
Toast.makeText(getApplicationContext(),"값을 입력하세요",Toast.LENGTH_LONG).show();
}
if(Float.parseFloat(num2) == 0){//0나누기 오류 검사 추가
Toast.makeText(getApplicationContext(),"0으로는 나눌 수 없습니다.",Toast.LENGTH_LONG).show();
}
else{
result = Float.parseFloat(num1) / Float.parseFloat(num2);
textResult.setText("계산 결과 : " + result.toString());
}
}
});
btnRest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
if(check(num1, num2)){
Toast.makeText(getApplicationContext(),"값을 입력하세요",Toast.LENGTH_LONG).show();
}
if(Float.parseFloat(num2) == 0){
Toast.makeText(getApplicationContext(),"0으로는 나눌 수 없습니다.",Toast.LENGTH_LONG).show();
}
else{
result = Float.parseFloat(num1) % Float.parseFloat(num2);
textResult.setText("계산 결과 : " + result.toString());
}
}
});
}
}
여기서 값이 비어있는지 확인하는 코드로서 check 매소드를 사용했는데 사실 둘 중 하나만 있어도 되지만 확실히 하고 싶어서 넣어놓은 코드입니다. Java에서 각 객체별 내용이 같은지 확인하는 함수로는 equal()을 사용해야 하며 ==을 사용하게 되면 서로 다른 객체인 경우 내용이 동일하다고 해도 false값이 나와 if else문이 제대로 작동하지 않을 가능성이 높습니다. 따라서 isEmpty()를 사용하여 비어있는지를 확인하고 내용이 없거나 같은지 확인하는 것으로 equal()을 사용하시면 되겠습니다.
다음 내용으로는 컴파운드 버튼을 설명하겠습니다.
'프로그램 개발 > 안드로이드 스튜디오 개발' 카테고리의 다른 글
안드로이드 스튜디오 레이아웃 1(리니어 레이아웃) (0) | 2021.06.12 |
---|---|
안드로이드 스튜디오 기본 위젯 2(컴파운드 버튼, 이미지뷰, 이미지버튼) (0) | 2021.05.05 |
안드로이드 스튜디오 뷰 클래스 레이아웃 (0) | 2021.04.01 |
안드로이드 스튜디오를 활용한 안드로이드 프로그래밍 2-3 정답 (0) | 2021.03.16 |
안드로이드 버튼 만들기 (0) | 2021.03.09 |