View / TextView / Button / EditText

2022. 10. 10. 15:37Dev.Program/Android

728x90

file - close project

  • start a new

======== ch2.p67.self_2_3

 

< activity_main.xml >

<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity"
  android:orientation="vertical">
</LinearLayout>
  • Textview 지우고(블럭 지정 후 Ctrl + Y) 레이아웃 수정하기
  • android:orientation="vertical" 추가 / 이렇게가 기본!
  • 이제 별 말 없으면 LinearLayout을 쓸 거!

 

> 버튼 만들 때 width와 height

  • wrap_content 글자 크기만큼
  • match_parent 부모 속성만큼

 

>

<!-- 버튼 4개 생성(홈페이지 열기, 전화걸기, 갤러리열기, 끝내기) -->
<androidx.appcompat.widget.AppCompatButton
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:id="@+id/btnHomepage"
  android:text="홈페이지열기"/>
<androidx.appcompat.widget.AppCompatButton
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:id="@+id/btnCall"
  android:text="전화걸기"/>
<androidx.appcompat.widget.AppCompatButton
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:id="@+id/btnGallery"
  android:text="갤러리열기"/>
<androidx.appcompat.widget.AppCompatButton
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:id="@+id/btnFinish"
  android:text="앱종료"/>
  • 버튼

 

< MainActivity.java >

onCreate → 자바의 main() 과 같음

  • 멤버변수로 만들수도있음(지금은 이렇게 안함)
public class MainActivity extends AppCompatActivity {

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

      // Button 위젯 ID 4개 가져오기 = findViewById(R.id.XXX)
      Button btnHomepage = findViewById(R.id.btnHomepage);
      Button btnCall = findViewById(R.id.btnCall);
      Button btnGallery = findViewById(R.id.btnGallery);
      Button btnFinish = findViewById(R.id.btnFinish);

      btnHomepage.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Toast.makeText(MainActivity.this, "홈페이지열기", Toast.LENGTH_SHORT).show();
          }
      });
      btnCall.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Toast.makeText(MainActivity.this, "전화걸기", Toast.LENGTH_SHORT).show();
          }
      });
      btnGallery.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Toast.makeText(MainActivity.this, "갤러리열기", Toast.LENGTH_SHORT).show();
          }
      });
      btnFinish.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Toast.makeText(MainActivity.this, "앱종료", Toast.LENGTH_SHORT).show();
          }
      });
  }
}

  • 실행하는 단말기

  • 실행화면
  • 버튼 클릭했을 때 밑에 뜨면 성공!

# tip

  • 이거 설정하면 대문자 안써도 자동완성됨! (Toast 같은 예약어 입력할 때!)

 

> 전화걸기

  • 이건 자바꺼(이거 아님!!!)
      btnCall.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("tel:/0518030909"));
              startActivity(intent);
          }
      });

  • 실행화면! (버튼 누르면 이 화면으로 넘어감!)



  • Ch2. 69p

  • Avtivity 클래스와 Layout 파일! 이 두개가 기본 세트!

  • 나중에 자바코드로도 변경가능!
  • 앱의 여러가지 정보를 담고있다

 

< Chapter4 >

< 뷰 >

  • 7p

> developer.android.com

  • 안드로이드 기본api
  • 이 홈페이지는 현업가서도 참조 많이 할 거.,,

 

  • background
  • #XXYYZZ : XX-RED칼라 YY-GREEN칼라 ZZ-BLUE칼라 16진수 (#ffffff 흰색)
  • 파란색
  • 녹색
  • 노랑
  • 빨강
  • 실행창

  • 왼쪽에 뜨는 박스 더블클릭하면 색 지정도 가능

 

  • 13p

 

  • 레이아웃 색상도 변경가능(15p)

  • 리니어 레이아웃
  • android:orientation="vertical"
  • 세트!

 

  • 실행된 프로젝트 종료

======== 새 프로젝트 만들기 0605_BasicAttribute

< padding 속성 >

자신의 내부에 들어있는 위젯(또는 텍스트 등) 등과 자신의 경계선 사이 간격 지정

        ex) 레이아웃에 padding 속성을 지정할 경우 레이아웃 내의 위젯과 레이아웃 간격을 조절

        ex2) EditText 에 padding 속성을 지정할 경우 EditText 에 입력되는 텍스트 위치 간격을 조절

< layout_margin 속성 >

자신과 부모 레이아웃 또는 주변 위젯과의 간격 지정

        ex) TextView 에 layout_margin 속성을 지정할 경우 TextView 위젯과 다른 위젯의 간격 조절

  • 글자에는 보통 sp 사용

 

> EditText

  • placeholder 같은 기능

 

<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity"
  android:orientation="vertical">

  <!-- TextView : 텍스트를 표시하는 위젯 -->
  <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="아래에 이름을 입력 : "
      android:textSize="20sp"/>

  <!-- EditText : 텍스트를 입력받는 위젯 -->
  <EditText
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:textSize="20sp"
      android:hint="이름"/>

  <!-- Button : 사용자로부터 클릭을 입력받는 위젯 -->
  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="확인"
      android:textSize="20sp"/>

</LinearLayout>

 

  • 실행창
  • 이름이라고 적혀있는 거 클릭하면 이렇게 가상키보드 뜸



  • 글씨 외에는 보통 dp 라고 씀(스크린 비율에 맞춤)

패딩적용후⇒

 

> margin

  • margin 추가

마진적용후 ⇒

 

> EditText 만 마진에서 패딩으로 바꿨을 때

  • 띄워진 거 볼 수 있다!



======== 새프로젝트 만들기 0605_BasicAttribute2

Button 위젯 5개 생성(버튼1, 버튼2, 버튼3, 버튼4, 버튼5)

<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity"
  android:orientation="vertical">

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="버튼1"/>
  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="버튼2"/>
  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="버튼3"/>
  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="버튼4"/>
  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="버튼5"/>

</LinearLayout>

< Visibility 속성 >

특정 위젯 또는 레이아웃의 표시 여부 설정(android:visibility="XXX")

   1. visible : 위젯 또는 레이아웃 표시(기본값)

   2. invisible : 위젯 또는 레이아웃 숨김. 단, 해당 위젯 또는 레이아웃의 위치는 그대로 보존

   3. gone: 위젯 또는 레이아웃 숨김. 단, 해당 위젯 또는 레이아웃의 위치를 다른 위젯이 차지

> android:visibility="속성값"

  • visible (디폴트값) invisible(버튼안보이고 자리차지) gone(버튼안보이고 자리차지X)
  • 약관동의내용 같은 건 gone 으로 숨겨놨다가 보여야하기 때문에 그럴 때 쓰임!

 

# tip

android:clickable="false"

android:enabled="false"

  • clickable / enabled 둘 다 클릭 안됨 ⇒ enabled 는 + 비활성화까지!

 

======== 새 프로젝트

p23

> 풀어보기

<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity"
  android:orientation="vertical"
  android:padding="10dp">

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="버튼 1"
      android:textSize="30sp"
      android:layout_margin="20dp"
      android:background="#EFEFB2"/>

  <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="여긴 텍스트뷰입니다."
      android:textSize="20sp"
      android:layout_margin="20dp"/>

  <EditText
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="#3F51B5"
      android:layout_margin="20dp"/>

  <Button
      android:layout_width="wrap_content"
      android:layout_height="match_parent"
      android:text="버튼 2"
      android:textSize="30sp"
      android:enabled="false"
      android:layout_margin="20dp"/>

</LinearLayout>
  • 실행화면


Ch4 - 28p

======== 0608_ch04_TextView_Basic 프로젝트 만들기

< TextView >

< activity_main.xml >

<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity"
  android:orientation="vertical">

  <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="text 속성"/>
  <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="textSize 속성"
      android:textSize="30sp"/>
  <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="textColor 속성"
      android:textSize="30sp"
      android:textColor="#0000ff"/>

</LinearLayout>

 

  • 손 안대면 normal이 디폴트!
  • bold
  • italic
  • |

  • deprecated 된 거 사용해볼거!
  • android:singleLine="true"

 

<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity"
  android:orientation="vertical">

  <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="text 속성"/>
  <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="textSize 속성"
      android:textSize="30sp"/>
  <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="textColor 속성"
      android:textSize="30sp"
      android:textColor="#0000ff"/>
  <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="textStyle 속성"
      android:textSize="30sp"
      android:textStyle="italic|bold"/>
  <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="typeFace 속성"
      android:textSize="30sp"
      android:typeface="serif"/>
  <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="singleLine 속성 singleLine 속성 singleLine 속성 singleLine 속성 singleLine 속성 singleLine 속성 singleLine 속성 singleLine 속성"
      android:textSize="30sp"
      android:singleLine="true"/>

</LinearLayout>

 

> TextView 3개 만들기(연습용)

<TextView
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:id="@+id/tv1"
  android:text="TextView 연습1"/>
<TextView
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:id="@+id/tv2"
  android:text="TextView 연습2"/>
<TextView
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:id="@+id/tv3"
  android:text="TextView 연습3"/>

 

< MainActivity.java >

  • Ctrl + P 누르면 어떤 값을 넣어야하는지 나옴

 

package com.example.a0608_ch04_textview_basic;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

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

      // --------------- TextView 속성을 자바 코드에서 변경하기 -----------------
      TextView tv1, tv2, tv3;
      tv1 = findViewById(R.id.tv1);
      tv2 = findViewById(R.id.tv2);
      tv3 = findViewById(R.id.tv3);

      // TextView 객체의 setXXX() 메서드를 호출하여 TextView 속성 변경 가능
      // => XXX 은 레이아웃 파일(xml) 내의 속성명
      tv1.setText("Hello, World!"); // 텍스트 변경
      tv1.setTextColor(Color.RED); // 텍스트 색상 변경
      tv1.setTextSize(40);

      tv2.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD_ITALIC);
      tv2.setTextSize(30);

  }
}

< SingleLine 속성 >

tv3.setText("SingleLine 속성 SingleLine 속성 SingleLine 속성 SingleLine 속성 SingleLine 속성 SingleLine 속성");
tv3.setTextSize(30);
tv3.setSingleLine();
  • 자바코드에서 이렇게 바꾸면 … 으로 생략 안해줌! 뒤에 안보임
  • 차이점 잘 보기!

======== 0608_ch04_Button_EditTextBasic 새 프로젝트 만들기

< Button / EditText >

<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity"
  android:orientation="vertical">

  <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="나는 어떤 위젯일까요?"
      android:textSize="30sp"/>

<Button
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="나는 어떤 위젯일까요?"
  android:textSize="30sp"/>

<EditText
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="나는 어떤 위젯일까요?"
  android:textSize="30sp"/>

</LinearLayout>

 

  • String text = et.getText().toString();
  • 스트링객체로 형변환 필요

 

btn.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
      // tv.setText("변경된 글자");
      // EditText 위젯에 입력된 텍스트 가져오기 => String 타입 변수에 저장
      String text = et.getText().toString(); // String타입으로 형변환필요!
      // Text
      tv.setText(text);
  }
});
  • EditText 에 글자입력 후 버튼 누르면 TextView 에 글자나타남!

 

< activity_main.xml >

<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity"
  android:orientation="vertical">

  <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="나는 어떤 위젯일까요?"
      android:id="@+id/tv"
      android:textSize="30sp" />

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="나는 어떤 위젯일까요?"
      android:id="@+id/btn"
      android:textSize="30sp" />

  <EditText
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="나는 어떤 위젯일까요?"
      android:textSize="30sp"
      android:id="@+id/et"
      android:singleLine="true"/>

</LinearLayout>

 

< MainActivity.java >

package com.example.a0608_ch04_button_edittextbasic;

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;

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      final TextView tv = findViewById(R.id.tv);
      final Button btn = findViewById(R.id.btn);
      final EditText et = findViewById(R.id.et);

      // 버튼을 클릭했을 때 EditText에 입력된 텍스트를 TextView에 출력 => 5단계
      // 주의! 4단계 또는 5단계 이벤트 처리 시 내부 클래스에서 외부에 있는 변수에 접근할 경우
      // 해당 변수에 final을 붙이거나, 멤버변수로 선언되어야 한다!
      btn.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              // tv.setText("변경된 글자");
              // EditText 위젯에 입력된 텍스트 가져오기 => String 타입 변수에 저장
              String text = et.getText().toString(); // String 타입으로 형변환 필요!
              // TextView 위젯에 가져온 텍스트 출력
              tv.setText(text);
          }
      });

  }
}

 

======== 0608_ch04_p34_Exam_4_1 새로 만들기

> 문제 풀어보기(ch4 34페이지 4-1번 문제)

 

< activity_main.xml >

<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity"
  android:orientation="vertical">

  <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="숫자1"
      android:id="@+id/Edit1"
      android:layout_margin="10dp"/>

  <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="숫자2"
      android:id="@+id/Edit2"
      android:layout_margin="10dp"/>

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="더하기"
      android:id="@+id/BtnAdd"
      android:layout_margin="10dp"/>

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="빼기"
      android:id="@+id/BtnSub"
      android:layout_margin="10dp"/>

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="나누기"
      android:id="@+id/BtnDiv"
      android:layout_margin="10dp"/>

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="곱하기"
      android:id="@+id/BtnMul"
      android:layout_margin="10dp"/>

  <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="계산 결과 : "
      android:id="@+id/TextResult"
      android:layout_margin="10dp"
      android:textColor="#ff0000"
      android:textSize="30dp"/>

</LinearLayout>

 

< MainActivity.java >

package com.example.a0608_ch04_p34_exam_4_1;

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;

public class MainActivity extends AppCompatActivity {

    EditText edit1, edit2;
    Button btnAdd, btnSub, btnMul, btnDiv;
    TextView textResult;

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

        btnAdd = findViewById(R.id.BtnAdd);
        btnMul = findViewById(R.id.BtnMul);
        btnDiv = findViewById(R.id.BtnDiv);
        btnSub = findViewById(R.id.BtnSub);
        edit1 = findViewById(R.id.Edit1);
        edit2 = findViewById(R.id.Edit2);
        textResult = findViewById(R.id.TextResult);

        // Button 위젯 4개에 대한 이벤트 처리
        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 입력받은 숫자 2개 가져와서 정수로 변환
                int num1 = Integer.parseInt(edit1.getText().toString());
                int num2 = Integer.parseInt(edit2.getText().toString());
                int result = num1 + num2;

                textResult.setText("계산 결과 : " + result);
            }
        });

        btnSub.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 입력받은 숫자 2개 가져와서 정수로 변환
                int num1 = Integer.parseInt(edit1.getText().toString());
                int num2 = Integer.parseInt(edit2.getText().toString());
                int result = num1 - num2;

                textResult.setText("계산 결과 : " + result);
            }
        });

        btnMul.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 입력받은 숫자 2개 가져와서 정수로 변환
                int num1 = Integer.parseInt(edit1.getText().toString());
                int num2 = Integer.parseInt(edit2.getText().toString());
                int result = num1 * num2;

                textResult.setText("계산 결과 : " + result);
            }
        });

        btnDiv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 입력받은 숫자 2개 가져와서 정수로 변환
                int num1 = Integer.parseInt(edit1.getText().toString());
                int num2 = Integer.parseInt(edit2.getText().toString());
                // 나눗셈의 경우 두번째 피연산자가 0일 경우 ArithmeticException 발생
                // => 따라서, 나눗셈 전 피연산자가 0인지 판별 필요
                if(num1 > 0 && num2 > 0) {
                    int result = num1 / num2;
                    textResult.setText("계산 결과 : " + result);
                } else {
                    // 하나라도 0이 입력됐을 경우 Toast 를 사용하여 에러 메세지 출력
                    textResult.setText("계산 결과 : 오류");
                    Toast.makeText(MainActivity.this, "숫자 입력 오류", Toast.LENGTH_SHORT).show();
                }

            }
        });
    }
}
  • 이렇게 하면 문제가 발생함!
  • 나누기에서 0으로 나눴을 경우 ArithmeticException 오류 발생!

 

> 해결방법

btnDiv.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
      int num1 = Integer.parseInt(edit1.getText().toString());
      int num2 = Integer.parseInt(edit2.getText().toString());
      if(num1 > 0 && num2 >0) {
          int result = num1 / num2;
          textResult.setText("계산 결과 : " + result);
      } else {

           textResult.setText("계산 결과 : 오류");
          Toast.makeText(MainActivity.this, "숫자 입력 오류", Toast.LENGTH_SHORT).show();
      }
  }
});
  • if 문 안에 따로 처리해줌
  • Toast ⇒ 잠깐 띄우고 사라짐

 

  • activity_main.xml 로 가서 디자인탭 누르고
  • 숫자 1 에서 inputType 찾기
  • 깃발모양 누른 후 number 체크해놓기!
  • 숫자만 입력할 수 있게 바뀜!
  • android:inputType="number”
  • 코드가 간단하다!

 

> android:inputType="numberDecimal"

  • double 타입도 가능! 소수점까지 적을 수 있다



< activity_main.xml >

<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity"
  android:orientation="vertical">

  <EditText
      android:id="@+id/Edit1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_margin="10dp"
      android:includeFontPadding="false"
      android:inputType="number"
      android:text="숫자1" />

  <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="숫자2"
      android:id="@+id/Edit2"
      android:inputType="number"
      android:layout_margin="10dp"/>

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="더하기"
      android:id="@+id/BtnAdd"
      android:layout_margin="10dp"/>

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="빼기"
      android:id="@+id/BtnSub"
      android:layout_margin="10dp"/>

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="나누기"
      android:id="@+id/BtnDiv"
      android:layout_margin="10dp"/>

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="곱하기"
      android:id="@+id/BtnMul"
      android:layout_margin="10dp"/>

  <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="계산 결과 : "
      android:id="@+id/TextResult"
      android:layout_margin="10dp"
      android:textColor="#ff0000"
      android:textSize="30dp"/>

</LinearLayout>

 

< MainActivity.java >

package com.example.a0608_ch04_p34_exam_4_1;

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;
  TextView textResult;

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

      btnAdd = findViewById(R.id.BtnAdd);
      btnMul = findViewById(R.id.BtnMul);
      btnDiv = findViewById(R.id.BtnDiv);
      btnSub = findViewById(R.id.BtnSub);
      edit1 = findViewById(R.id.Edit1);
      edit2 = findViewById(R.id.Edit2);
      textResult = findViewById(R.id.TextResult);

      btnAdd.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              int num1 = Integer.parseInt(edit1.getText().toString());
              int num2 = Integer.parseInt(edit2.getText().toString());
              int result = num1 + num2;
              textResult.setText("계산 결과 : " + result);
          }
      });

      btnDiv.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              int num1 = Integer.parseInt(edit1.getText().toString());
              int num2 = Integer.parseInt(edit2.getText().toString());
              if(num1 > 0 && num2 >0) {
                  int result = num1 / num2;
                  textResult.setText("계산 결과 : " + result);
              } else {
                  textResult.setText("계산 결과 : 오류");
                  Toast.makeText(MainActivity.this, "숫자 입력 오류", Toast.LENGTH_SHORT).show();
              }
          }
      });

      btnSub.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              int num1 = Integer.parseInt(edit1.getText().toString());
              int num2 = Integer.parseInt(edit2.getText().toString());
              int result = num1 - num2;
              textResult.setText("계산 결과 : " + result);
          }
      });

      btnMul.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              int num1 = Integer.parseInt(edit1.getText().toString());
              int num2 = Integer.parseInt(edit2.getText().toString());
              int result = num1 * num2;
              textResult.setText("계산 결과 : " + result);
          }
      });

  }
}



======== 0608_ch04_p42_self_4_3 만들기

> 42p 풀기

< activity_main.xml >

<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity"
  android:orientation="vertical">

  <EditText
      android:id="@+id/Edit1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_margin="10dp"
      android:includeFontPadding="false"
      android:inputType="numberDecimal"
      android:hint="숫자1" />

<EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:hint="숫자2"
      android:id="@+id/Edit2"
      android:inputType="numberDecimal"
      android:layout_margin="10dp"/>

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="더하기"
      android:id="@+id/BtnAdd"
      android:layout_margin="10dp"/>

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="빼기"
      android:id="@+id/BtnSub"
      android:layout_margin="10dp"/>

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="나누기"
      android:id="@+id/BtnDiv"
      android:layout_margin="10dp"/>

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="곱하기"
      android:id="@+id/BtnMul"
      android:layout_margin="10dp"/>

  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="나머지값"
      android:id="@+id/BtnMod"
      android:layout_margin="10dp"/>

  <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="계산 결과 : "
      android:id="@+id/TextResult"
      android:layout_margin="10dp"
      android:textColor="#ff0000"
      android:textSize="30dp"/>

</LinearLayout>



>> 지금까지는 5단계로 구현한 거고, 4단계 구현으로 바꿔보기!

View.OnClickListener listener = new View.OnClickListener() {
  @Override
  public void onClick(View v) {
     
  }
};

// 4단계 리스너와 버튼 연결
btnAdd.setOnClickListener(listener);
btnSub.setOnClickListener(listener);
btnMul.setOnClickListener(listener);
btnDiv.setOnClickListener(listener);
btnMod.setOnClickListener(listener);
  • 4단계 기본 모양!

< requestFocus >

View.OnClickListener listener = new View.OnClickListener() {
  @Override
  public void onClick(View v) {
      // 숫자1, 숫자2 에 대한 입력 여부 체크 => 미입력 시 오류 메세지 출력
      if(edit1.getText().toString().length() == 0) { // edit1.length() == 0 도 동일
          Toast.makeText(MainActivity.this, "숫자1 입력 필수!", Toast.LENGTH_SHORT).show();
          edit1.requestFocus(); // EditText 위젯 숫자1 입력 창에 커서 요청
      } else if(edit2.length() == 0) {
          Toast.makeText(MainActivity.this, "숫자2 입력 필수!", Toast.LENGTH_SHORT).show();
          edit2.requestFocus(); // EditText 위젯 숫자2 입력 창에 커서 요청
      }
  }
};
/ 버튼 여러개를 구별하기 위해서 onClick() 메서드의 파라미터 v 를 활용
if(v == btnAdd) {
  Toast.makeText(MainActivity.this, "덧셈!", Toast.LENGTH_SHORT).show();
}
  • if 문을 추가하여 버튼 구분하기 (리스너 안에 넣기)
  • 확인을 위해 Toast 하나 띄우기
  • 토스트 뜸

 

if(v == btnAdd) {
  // 입력받은 숫자 2개 가져와서 정수로 변환
  int num1 = Integer.parseInt(edit1.getText().toString());
  int num2 = Integer.parseInt(edit2.getText().toString());
  int result = num1 + num2;

  textResult.setText("계산 결과 : " + result);
} else if(v == btnSub) {

} else if(v == btnDiv) {

} else if(v == btnMul) {

} else if(v == btnMod) {

}
  • 버튼 구분 하기!

 

View.OnClickListener listener = new View.OnClickListener() {
  @Override
  public void onClick(View v) {
      // 숫자1, 숫자2 에 대한 입력 여부 체크 => 미입력 시 오류 메세지 출력
      if(edit1.getText().toString().length() == 0) { // edit1.length() == 0 도 동일
          Toast.makeText(MainActivity.this, "숫자1 입력 필수!", Toast.LENGTH_SHORT).show();
          edit1.requestFocus(); // EditText 위젯 숫자1 입력 창에 커서 요청
      } else if(edit2.length() == 0) {
          Toast.makeText(MainActivity.this, "숫자2 입력 필수!", Toast.LENGTH_SHORT).show();
          edit2.requestFocus(); // EditText 위젯 숫자2 입력 창에 커서 요청
      }
     
      // 버튼 여러개를 구별하기 위해서 onClick() 메서드의 파라미터 v 를 활용
      // 1. if 문을 사용하여 변수 v 를 버튼 객체와 비교
      if(v == btnAdd) {
          // 입력받은 숫자 2개 가져와서 실수로 변환
          double num1 = Double.parseDouble(edit1.getText().toString());
          double num2 = Double.parseDouble(edit2.getText().toString());
          double result = num1 + num2;

          textResult.setText("계산 결과 : " + result);
      } else if(v == btnSub) {
          double num1 = Double.parseDouble(edit1.getText().toString());
          double num2 = Double.parseDouble(edit2.getText().toString());
          double result = num1 - num2;

          textResult.setText("계산 결과 : " + result);
      } else if(v == btnMul) {
          double num1 = Double.parseDouble(edit1.getText().toString());
          double num2 = Double.parseDouble(edit2.getText().toString());
          double result = num1 * num2;

          textResult.setText("계산 결과 : " + result);
      } else if(v == btnDiv) {
          double num1 = Double.parseDouble(edit1.getText().toString());
          double num2 = Double.parseDouble(edit2.getText().toString());
          double result = num1 / num2;

          textResult.setText("계산 결과 : " + result);
      } else if(v == btnMod) {
          double num1 = Double.parseDouble(edit1.getText().toString());
          double num2 = Double.parseDouble(edit2.getText().toString());
          double result = num1 % num2;

          textResult.setText("계산 결과 : " + result);
      }

      // 2. switch 문을 사용하여 변수 v 에 대한 id 값을 가져와서 버튼 위젯 아이디와 비교
     
  }
};
  • 더블 타입으로 변경(소수점까지 처리하기 위해서)
  • Integer.parseInt() 도 Double.parseDouble 로 바꿈
if(edit1.getText().toString().length() == 0) { // edit1.length() == 0 도 동일
  Toast.makeText(MainActivity.this, "숫자1 입력 필수!", Toast.LENGTH_SHORT).show();
  edit1.requestFocus(); // EditText 위젯 숫자1 입력 창에 커서 요청
  return;
} else if(edit2.length() == 0) {
  Toast.makeText(MainActivity.this, "숫자2 입력 필수!", Toast.LENGTH_SHORT).show();
  edit2.requestFocus(); // EditText 위젯 숫자2 입력 창에 커서 요청
  return;
}
  • return 을 넣어줘야 오류 없이 다시 돌아감!
double num1 = Double.parseDouble(edit1.getText().toString());
double num2 = Double.parseDouble(edit2.getText().toString());
if(v == btnAdd) {
  double result = num1 + num2;
  textResult.setText("계산 결과 : " + result);
} else if(v == btnSub) {
  double result = num1 - num2;
  textResult.setText("계산 결과 : " + result);
} else if(v == btnMul) {
  double result = num1 * num2;
  textResult.setText("계산 결과 : " + result);
} else if(v == btnDiv) {
  double result = num1 / num2;
  textResult.setText("계산 결과 : " + result);
} else if(v == btnMod) {
  double result = num1 % num2;
  textResult.setText("계산 결과 : " + result);
}
  • 중복 된 코드는 바깥으로 빼준다

 

double num1 = Double.parseDouble(edit1.getText().toString());
double num2 = Double.parseDouble(edit2.getText().toString());
double result = 0;
if(v == btnAdd) {
  result = num1 + num2;
} else if(v == btnSub) {
  result = num1 - num2;
} else if(v == btnMul) {
  result = num1 * num2;
} else if(v == btnDiv) {
  result = num1 / num2;
} else if(v == btnMod) {
  result = num1 % num2;
}

textResult.setText("계산 결과 : " + result);
  • 더 간결하게 줄일 수 있다!
  • result 변수를 바깥으로 꺼내줘야 if 문 밖에서도 사용가능!

 

} else if(v == btnDiv) {
  result = num1 / num2;
  if(num2 == 0) {
      Toast.makeText(MainActivity.this, "0으로 나눌 수 없음!", Toast.LENGTH_SHORT).show();
      edit2.requestFocus();
      return;
  }
} else if(v == btnMod) {
  result = num1 % num2;
  if(num2 == 0) {
      Toast.makeText(MainActivity.this, "0으로 나눌 수 없음!", Toast.LENGTH_SHORT).show();
      edit2.requestFocus();
       return;
  }
}
  • 0으로 나눴을 경우 처리해주기
  • return 을 해주면 else 문 안써도됨

 

> 나누기가 딱 맞아 떨어질 때 5.0 말고 5 라고 나오게끔 하고싶다!

// 연산 결과의 소수점 자리 부분 숫자가 0일 경우 .0 을 표시하지 않도록 출력문 수정
              if(result%1==0) { // 소수점 자리 숫자가 0일 경우
                  textResult.setText("계산 결과 : " + (int)result);
              } else { // 소수점 자리 숫자가 0이 아닐 경우
                  textResult.setText("계산 결과 : " + result);
              }
  • 꼭 *10 %10 이라고 안하고, %1로 하면 소수점 구할 수 있다!

⇒ 코드 제일 밑으로 옮겨주기(전체 블럭 설정 후 Ctrl + Shift + 화살표)

 

> switch~case 문으로(정수형, 문자열, Enum 타입이 올수있다)

  • btnAdd 라고하면 Button 타입이기 때문에 이렇게 가져오면 안됨!
  • int 타입으로 가져오기(비교)

 

// 2. switch 문을 사용하여 변수 v 에 대한 id 값을 가져와서 버튼 위젯 아이디와 비교
// v.getId() == R.id.버튼위젯아이디 를 비교
switch (v.getId()) { // 안드로이드에서 사용하는 id 값을 int형이므로 switch 문 사용 가능
  // case 문을 통해 각 버튼에 대한 id 값을 비교
  case R.id.BtnAdd:
      result = num1 + num2;
      break;
  case R.id.BtnSub:
      result = num1 - num2;
      break;
  case R.id.BtnMul:
      result = num1 * num2;
      break;
  case R.id.BtnDiv:
      if(num2 == 0) {
          Toast.makeText(MainActivity.this, "0으로 나눌 수 없음!", Toast.LENGTH_SHORT).show();
          edit2.requestFocus();
          return;
      }
      result = num1 / num2;
      break;
  case R.id.BtnMod:
      if(num2 == 0) {
          Toast.makeText(MainActivity.this, "0으로 나눌 수 없음!", Toast.LENGTH_SHORT).show();
          edit2.requestFocus();
          return;
      }
      result = num1 % num2;
}

 

728x90