당신은 주제를 찾고 있습니까 “안드로이드 계산기 – 안드로이드 계산기앱 UI 만들기 [안드로이드 계산기 앱 – 자바 변수, 조건문, 메소드 #1]“? 다음 카테고리의 웹사이트 https://you.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://you.maxfit.vn/blog/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 코딩발전소 이(가) 작성한 기사에는 조회수 6,441회 및 좋아요 49개 개의 좋아요가 있습니다.
안드로이드 계산기 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 안드로이드 계산기앱 UI 만들기 [안드로이드 계산기 앱 – 자바 변수, 조건문, 메소드 #1] – 안드로이드 계산기 주제에 대한 세부정보를 참조하세요
자바 기본 문법으로 만드는 안드로이드 계산기앱
1. 컨스트레인트 레이아웃을 활용한 계산기 앱 UI 만들기
컨스트레인트 참고 영상 : https://youtu.be/K0dKaEfPAko
2. viewBinding 활용 build.gradle
// build.gradle
buildFeatures {
// Determines whether to generate a BuildConfig class.
buildConfig = true
// Determines whether to support View Binding.
// Note that the viewBinding.enabled property is now deprecated.
viewBinding = false
// Determines whether to support Data Binding.
// Note that the dataBinding.enabled property is now deprecated.
dataBinding = false
// Determines whether to generate binder classes for your AIDL files.
aidl = true
// Determines whether to support RenderScript.
renderScript = true
// Determines whether to support injecting custom variables into the module’s R class.
resValues = true
// Determines whether to support shader AOT compilation.
shaders = true
}
// gradle.properties
android.defaults.buildfeatures.buildconfig=true
android.defaults.buildfeatures.aidl=true
android.defaults.buildfeatures.renderscript=true
android.defaults.buildfeatures.resvalues=true
android.defaults.buildfeatures.shaders=true
android.defaults.buildfeatures.viewbinding=true
android.defaults.buildfeatures.databinding=true
안드로이드 개발자 : https://developer.android.com
코딩발전소 블로그 : https://cdbjs.tistory.com/
▣ 기타문의 : [email protected]
#안드로이드_계산기_앱 #Android_Calculator_App
안드로이드 계산기 주제에 대한 자세한 내용은 여기를 참조하세요.
[Android] 계산기 만들기
[Andro] 계산기 만들기. Hyunsun 2021. 10. 7. 00:00. 안드로이드 스튜디오로 탁상용 계산기 만들기. 테이블레이아웃을 이용하여 위젯을 배치합니다.Source: hyunsun99.tistory.com
Date Published: 10/29/2021
View: 9064
[Android] 계산기 앱 만들기 (안드로이드, 계산기 애플리케이션 …
[Andro] 계산기 앱 만들기 (안드로이드, 계산기 애플리케이션, 후위 표기법, Calculator, infix, postfix). Bbaktaeho 2020. 9. 14. 18:27.Source: bbaktaeho-95.tistory.com
Date Published: 7/29/2021
View: 4626
계산기 앱 사용 – Android 고객센터
참고: 계산기 앱은 Andro 6.0 이상에서 사용할 수 있습니다. Google Play 스토어에서 계산기 앱을 다운로드하세요. 결과 복사 또는 삭제. 중요: 설정은 휴대전화마다 …
Source: support.google.com
Date Published: 6/30/2022
View: 723
[Java][Android] 계산기 만들기 – 팀노바 & Stickode 개발자 블로그
[Java][Andro] 계산기 만들기. teamnova 2021. 3. 5. 13:00. 오늘은 스틱코드를 이용하여 계산기를 만들어 보겠습니다. 레이아웃은 아래 스틱코드 포스트를 참고 …Source: stickode.tistory.com
Date Published: 5/30/2021
View: 1410
[Android] 안드로이드 스튜디오로 계산기 만들기
[Andro] 안드로이드 스튜디오로 계산기 만들기. whitz 2021. 12. 20. 11:11. – EditText 2개로 텍스트를 입력받은 후 버튼 4개 ( 더하기, 빼기, 곱하기, …Source: heezit.tistory.com
Date Published: 4/23/2021
View: 3290
[Android] 계산기 만들기 – 개발 일지
[Andro] 계산기 만들기 … 일단 View 를 만들어놓는다. Two.java 소스. package com.example.lastmycal; import androx.appcompat.app.Source: ceodanbi.tistory.com
Date Published: 4/26/2021
View: 834
Android용 계산기 – APK 다운로드
Andro용 계산기 apk 8.2 (453324893)을(를) 다운로드하십시오. … 단순/고급 수학 함수 기능을 갖춘 계산기 앱으로 멋진 디자인을 자랑합니다.
Source: apkpure.com
Date Published: 11/23/2021
View: 8240
코틀린 안드로이드 – 계산기2(layout,계산기 기능) – velog
계산기 계산기능 만들기~ … 코틀린 안드로이드 – 계산기2(layout,계산기 기능) … 계산기 계산식이나오는 부분과 다른 drawble layout …
Source: velog.io
Date Published: 1/29/2021
View: 5339
주제와 관련된 이미지 안드로이드 계산기
주제와 관련된 더 많은 사진을 참조하십시오 안드로이드 계산기앱 UI 만들기 [안드로이드 계산기 앱 – 자바 변수, 조건문, 메소드 #1]. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 안드로이드 계산기
- Author: 코딩발전소
- Views: 조회수 6,441회
- Likes: 좋아요 49개
- Date Published: 2020. 4. 3.
- Video Url link: https://www.youtube.com/watch?v=9y3HnSMaH9o
[Android] 계산기 만들기
안드로이드 스튜디오로 탁상용 계산기 만들기
테이블레이아웃을 이용하여 위젯을 배치합니다.
테이블레이아웃은 위젯을 표 형태로 배치할 때 주로 활용됩니다.
의 수는 행의 수 이고, 열의 수는 안에 포함된 위젯의 수로 결정됩니다. 코드
activity_main.xml
MainActivity.java
package com.cookandroid.test; import android.os.Bundle; import android.view.View; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private TextView text; private double storedValue; private char curOperator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setTitle(“탁상용 계산기”); text = findViewById(R.id.text); } public void onClick(View view) { String current = text.getText().toString(); switch (view.getId()) { case R.id.n0: text.setText(current + “0”); break; case R.id.n1: text.setText(current + “1”); break; case R.id.n2: text.setText(current + “2”); break; case R.id.n3: text.setText(current + “3”); break; case R.id.n4: text.setText(current + “4”); break; case R.id.n5: text.setText(current + “5”); break; case R.id.n6: text.setText(current + “6”); break; case R.id.n7: text.setText(current + “7”); break; case R.id.n8: text.setText(current + “8”); break; case R.id.n9: text.setText(current + “9”); break; case R.id.ndot: text.setText(current + “.”); break;
숫자를 먼저 입력하지 않고 연산자 버튼 또는 OK 버튼을 누르면 에러가 나서 앱이 강제 종료되는데, 이를 방지하기 위하여 토스트(Toast)로 예외처리를 합니다.
case 안에 if문을 사용하여 토스트로 에러 메세지를 표시해줍니다.
“Toast.makeText(getApplicationContext(), “숫자를 먼저 입력하세요”, Toast.LENGTH_SHORT).show();”
case R.id.plus: if (current.equals(“”)) { Toast.makeText(getApplicationContext(), “숫자를 먼저 입력하세요”, Toast.LENGTH_SHORT).show(); } else { storedValue = Double.parseDouble(current); curOperator = ‘+’; text.setText(“”); break; } case R.id.sub: if (current.equals(“”)) { Toast.makeText(getApplicationContext(), “숫자를 먼저 입력하세요”, Toast.LENGTH_SHORT).show(); } else { storedValue = Double.parseDouble(current); curOperator = ‘-‘; text.setText(“”); break; } case R.id.mul: if (current.equals(“”)) { Toast.makeText(getApplicationContext(), “숫자를 먼저 입력하세요”, Toast.LENGTH_SHORT).show(); } else { storedValue = Double.parseDouble(current); curOperator = ‘*’; text.setText(“”); break; } case R.id.div: if (current.equals(“”)) { Toast.makeText(getApplicationContext(), “숫자를 먼저 입력하세요”, Toast.LENGTH_SHORT).show(); } else { storedValue = Double.parseDouble(current); curOperator = ‘/’; text.setText(“”); break; } case R.id.clear: text.setText(“”); storedValue = 0.0; break; case R.id.Ok: if (current.equals(“”)) { Toast.makeText(getApplicationContext(), “숫자를 먼저 입력하세요”, Toast.LENGTH_SHORT).show(); } else { double result = 0; double thisValue = Double.parseDouble(text.getText().toString()); switch (curOperator) { case ‘+’: result = storedValue + thisValue; break; case ‘-‘: result = storedValue – thisValue; break; case ‘*’: result = storedValue * thisValue; break; case ‘/’: result = storedValue / thisValue; break; } text.setText(“” + result); storedValue = 0.0; break; } } } }
결과
[Android] 계산기 앱 만들기 (안드로이드, 계산기 애플리케이션, 후위 표기법, Calculator, infix, postfix)
반응형
2020-09-14 수정 : (우리가 일상에서 이용하는 수식은 중위 표기법입니다)
들어가며
자바 언어를 검색을 통해서 익히다 보니 어떤 util이 더 좋은지 아직 감이 안 잡혔고 메서드를 만들어 사용하는 것도 많이 부족합니다.
때문에 자바 언어가 많이 미숙해서 코드가 좋지 못한 점 양해 부탁드립니다.
제가 구현한 코드는 답이 아닙니다. 참고로만 봐주시면 감사하겠습니다.
이번에 만들어볼 계산기는 윈도우 계산기입니다.
윈도우 계산기 안드로이드 계산기 (최대한 비슷하게 해봄ㅋㅋ)
간단한 연산만 할 수 있도록 구현하겠습니다.
참고로 계산기를 구현하는 것은 쉬운 일이 아닙니다. 저 역시 구현하면서 논리적인 생각, 자료구조를 떠올리며 많은 노력을 쏟았습니다.
프로젝트 생성
bbaktaeho-95.tistory.com/57
위의 포스팅에서 프로젝트 생성과 Splash 구현까지 그대로 따라 하면 됩니다.
res/values/colors.xml
프로젝트에서 사용할 색상을 먼저 작성합니다.
#000000 #FFFFFF #E6E6E6 검은색, 흰색, 회색을 추가했습니다.
res/values/styles.xml
화면에 보일 스타일을 따로 작성했습니다.
메인 파일에서 추가하지 않고 어떻게 해야 스타일을 적용시킬 수 있을까 찾아보다가 styles.xml 에서 원하는 스타일을 작성하면 layout들의 스타일, 테마까지 쉽게 적용시킬 수 있었습니다.
Splash 화면, Main 화면에 적용시킬 스타일만 작성했습니다.
res/layout/activity_main.xml
이제 UI를 만들어보겠습니다.
가장 먼저 루트 레이아웃으로 LinearLayout을 선택했고 그 안에 RelativeLayout, TableLayout 으로 구현했습니다.
각 TableRow에 버튼을 균형적으로 배치할 수 있도록 TableLayout의 속성 값으로 android:stretchColumns=”*” 옵션을 추가했습니다.
하나의 TableRow에 들어있는 Button들입니다.
여기서 버튼에 onClick 속성이 있는데 자바, 코틀린 코드에서 리스너 메서드를 구현하지 않아도 각 뷰 컴포넌트들에게 직접적으로 메서드를 연결할 수 있었습니다.
이러한 방법을 추천하지 않는다고 하지만 단순히 어떤 버튼이 클릭되었는지만 아는 기능뿐이고 메인 코드가 줄어드는 장점이 있기 때문에 적용했습니다.
다음은 수식과 결과가 나오는 TextView입니다.
여기는 RelativeLayout을 이용해서 구현했습니다.
MainActivity.java
앞서 말씀드렸던 onClick 속성을 적용하려면 View 타입의 매개변수가 있는 메서드를 선언해야 합니다.
public void buttonClick(View v) {…}
특히 public 제어자로 선언하지 않으면 사용할 수 없습니다. (엄청 삽질함)
자꾸 새로 만들라는 경고 메시지만 나옵니다.
다음은 MainActivity 클래스의 필드입니다.
private TextView txtExpression; private TextView txtResult; private List
checkList; // -1: 이콜, 0: 연산자, 1: 숫자, 2: . / 예외 발생을 막는 리스트 private Stack operatorStack; // 연산자를 위한 스택 private List infixList; // 중위 표기 private List postfixList; // 후위 표기 TextView들은 수식과 계산 결과 UI입니다.
나머지 스택과 리스트는 계산, 예외 처리를 하기 위한 필드입니다.
다음으로 전체 MainActivity 클래스의 메서드들입니다.
예외나 추가적인 기능을 처리하느라 메서드가 많아지고 서로 연관성이 좀 생겼습니다..
전체 코드는 깃허브 링크로 공유하겠습니다. 포스팅에서 몇 가지 메서드들만 다뤄보겠습니다.
init()
// 필드 초기화 void init() { txtExpression = findViewById(R.id.txt_expression); txtResult = findViewById(R.id.txt_result); checkList = new ArrayList<>(); operatorStack = new Stack<>(); infixList = new ArrayList<>(); postfixList = new ArrayList<>(); ActionBar actionBar = getSupportActionBar(); assert actionBar != null; actionBar.hide(); }
필드들을 초기화하고 ActionBar를 숨김 처리합니다.
getWeight(String)
// 연산자 가중치 (우선순위 *,/,%,+,-) int getWeight(String operator) { int weight = 0; switch (operator) { case “X”: case “/”: weight = 5; break; case “%”: weight = 3; break; case “+”: case “-“: weight = 1; break; } return weight; }
연산자의 우선순위에 따라 가중치를 부여하는 메서드입니다.
후위 표기법으로 나타낼 때 가장 중요한 역할을 합니다.
infixToPostfix()
// 전위 -> 후위 void infixToPostfix() { for (String item : infixList) { // 피연산자 if (isNumber(item)) postfixList.add(String.valueOf(Double.parseDouble(item))); // 연산자 else { if (operatorStack.isEmpty()) operatorStack.push(item); else { if (getWeight(operatorStack.peek()) >= getWeight(item)) postfixList.add(operatorStack.pop()); operatorStack.push(item); } } } while (!operatorStack.isEmpty()) postfixList.add(operatorStack.pop()); }
중위 표기법을 후위 표기법으로 변환하는 메서드입니다.
미리 저장했던 infixList(중위 표기법)에서 operatorStack을 이용해 연산자 우선순위에 따라 postfixList(후위 표기법)에 추가합니다.
출처 : https://wayhome25.github.io/cs/2017/04/18/cs-22/ 설명이 한 번에 이해되서 가지고 왔습니다.
calculate()
// 계산 String calculate(String num1, String num2, String op) { double first = Double.parseDouble(num1); double second = Double.parseDouble(num2); double result = 0.0; try { switch (op) { case “X”: result = first * second;break; case “/”: result = first / second;break; case “%”: result = first % second;break; case “+”: result = first + second;break; case “-“: result = first – second;break; } } catch (Exception e) { Toast.makeText(getApplicationContext(), “연산할 수 없습니다.”, Toast.LENGTH_SHORT).show(); } return String.valueOf(result); }
실질적인 계산을 하는 메서드입니다.
결과 값을 문자열로 변환하고 리턴해줍니다.
실행
동영상은 팝업창 또는 전체 화면으로 봐주세요.
GitHub
github.com/bbaktaeho/all-my-studies/tree/56999b73e76c0b3bbff89a3c5f22d3c0ef8937fe/android/Calculator/app/src/main/java/com/example/calculator
참고 자료
recipes4dev.tistory.com/126
wayhome25.github.io/cs/2017/04/18/cs-22/
recipes4dev.tistory.com/55
반응형
계산기 앱 사용
휴대전화의 계산기 앱 을 사용하여 간단한 계산 또는 고급 계산을 할 수 있습니다.
참고: 계산기 앱은 Android 6.0 이상에서 사용할 수 있습니다. Google Play 스토어에서 계산기 앱을 다운로드하세요.
결과 복사 또는 삭제
중요: 설정은 휴대전화마다 다를 수 있습니다. 자세한 내용은 기기 제조업체에 문의하세요.
입력한 항목 삭제 또는 결과 삭제 항목 일부를 삭제하려면 삭제 를 탭합니다. 삭제 가 없는 경우 DEL 을 탭합니다.
를 탭합니다. 삭제 가 없는 경우 을 탭합니다. 모든 항목을 지우거나 최종 결과를 지우려면 AC를 탭합니다.
결과 복사 및 붙여넣기 결과를 복사하는 방법은 다음과 같습니다: 결과를 길게 터치합니다. 컨텍스트 메뉴에서 복사를 탭합니다. 결과를 붙여넣으려면 다음 단계를 따릅니다. 계산기 앱이나 다른 앱에서 붙여넣을 위치를 길게 터치합니다. 컨텍스트 메뉴에서 붙여넣기를 탭합니다.
이전 계산 목록 검색, 사용 및 삭제하기
이전 수식 및 결과 목록 찾기: 계산기 상단에서 아래로 스와이프하세요. 스크롤하면 이전 계산 목록을 확인할 수 있습니다.
계산기 상단에서 아래로 스와이프하세요. 스크롤하면 이전 계산 목록을 확인할 수 있습니다. 이전 계산과 계산기 버튼을 동시에 보기: 계산기 기록 일부만 아래로 드래그하세요. 기록이 일부만 표시되는 경우에도 스크롤하여 이전 계산을 확인할 수 있습니다.
계산기 기록 일부만 아래로 드래그하세요. 기록이 일부만 표시되는 경우에도 스크롤하여 이전 계산을 확인할 수 있습니다. 현재 수식에 이전의 수식 또는 결과를 사용하기: 수식 또는 결과를 탭합니다.
숫자 저장, 변경 , 다시 불러오기
번호 저장:
디스플레이 또는 이전 계산 목록의 결과에서 숫자를 길게 터치하고 MS를 탭합니다. 저장된 숫자에서 더하거나 빼기:
디스플레이 또는 이전 계산 목록의 결과에서 숫자를 길게 터치합니다. 저장된 숫자에 새로운 숫자를 더하려면 M+ 를 탭합니다.
를 탭합니다. 저장된 숫자에서 새로운 숫자를 빼려면 M-를 탭합니다. 변경사항이 있는 저장된 숫자 표시:
커서를 디스플레이 끝으로 이동합니다. 길게 터치한 후 손가락을 떼고 MR을 탭합니다.
고급 수학 계산
[Java][Android] 계산기 만들기
오늘은 스틱코드를 이용하여 계산기를 만들어 보겠습니다
레이아웃은 아래 스틱코드 포스트를 참고해주세요
stickode.com/detail.html?no=1932
계산기
먼저 필요한 변수를 선언 해줍니다.
MainActivity.java
선언한 변수에 레이아웃 Button 과 EditText를 할당해줍니다.
특수 키 로직을 만들어 줍니다
‘C’ Clear 버튼 / ‘±’ 정수 실수 부호 버튼
‘ + ‘, ‘ – ‘, ‘ * ‘, ‘ / ‘, ‘%’, ‘DEL’, ‘=’ 버튼
마지막으로 각 숫자 버튼 로직을 작성해줍니다.
참고 포스팅
* setText, getText
stickode.com/detail.html?no=1172
* onClick
stickode.com/detail.html?no=737
* xml
stickode.com/detail.html?no=1932
* java code
stickode.com/detail.html?no=1933
[Android] 안드로이드 스튜디오로 계산기 만들기
– EditText 2개로 텍스트를 입력받은 후 버튼 4개 ( 더하기, 빼기, 곱하기, 나누기 ) 를 이용한 계산기를 만들어 볼 것이다.
– 디자인 할 수 있는 .xml 파일에서 LinearLayout으로 바꿔 진행했다.
– EditText는 inputType을 number로 설정해서 숫자만 받도록 설정
– 모든 객체를 id를 지정해서 Java에서 사용하기 쉽도록
– 버튼들은 너비를 match – parent로 설정하여 폰 화면 너비에 맞췄음
– 레이아웃에 margin과 패딩을 주어서 여백을 두었음
package com.example.test3; 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); EditText et1 = findViewById(R.id.et1); EditText et2 = findViewById(R.id.et2); Button btn1 = findViewById(R.id.btn1); Button btn2 = findViewById(R.id.btn2); Button btn3 = findViewById(R.id.btn3); Button btn4 = findViewById(R.id.btn4); TextView tv1 = findViewById(R.id.tv1); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int sum = Integer.parseInt(et1.getText().toString())+Integer.parseInt(et2.getText().toString()); tv1.setText(“계산 결과 : “+sum); } }); btn2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int diff = Integer.parseInt(et1.getText().toString())-Integer.parseInt(et2.getText().toString()); tv1.setText(“계산 결과 : “+diff); } }); btn3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int mul = Integer.parseInt(et1.getText().toString())*Integer.parseInt(et2.getText().toString()); tv1.setText(“계산 결과 : “+mul); } }); btn4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int div = Integer.parseInt(et1.getText().toString())/Integer.parseInt(et2.getText().toString()); tv1.setText(“계산 결과 : “+div); } }); } }
– 버튼 1개씩마다 계산해주는 메서드 설정함
– 더하기, 빼기, 곱하기, 나누기 버튼에 맞춰서 EditText에서 받아온 숫자를 계산식을 작성
– EditText에 작성한 글을 toString으로 받아와서 계산하기 위해 Integer 타입으로 변환해줌
계산기 결과
[Android] 계산기 만들기
일단 View 를 만들어놓는다.
Two.java 소스
package com.example.lastmycal; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class Two extends AppCompatActivity { TextView textView; EditText editText; String rule=””; //사칙연산기호 float value1; //값1 float value2; //값2 boolean check=false; //기호 연속입력방지 (기호 입력시 true로) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); textView=findViewById(R.id.view); editText=findViewById(R.id.edit); editText.setInputType(0); //타자기가 안뜸 }//end public void num(View vw){ int id = vw.getId(); String strtmp = editText.getText().toString(); //if if(rule.equals(“=”) || rule.equals(“error”)){ //전에 입력한 기호가 등호였거나 에러인경우 초기화 initialize(); } if(check){ editText.setText(“”); check=false; } if(strtmp.startsWith(“0”) &&! (strtmp.startsWith(“0.”))){ editText.setText(“”); } //switch switch(vw.getId()){ case R.id.allclear: initialize(); break; case R.id.delete: //입력란 오른쪽부터 하나씩지우기 if(!(strtmp.equals(“”))) //입력부분이 빈칸이 아닌경우 editText.setText(strtmp.substring(0, strtmp.length()-1)); //뒤에서부터 하나씩 지우기 if((strtmp.length()==2 && strtmp.startsWith(“-“))) editText.setText(“”); break; //숫자입력 case R.id.num0: editText.append(“0”); break; case R.id.num1: editText.append(“1”); break; case R.id.num2: editText.append(“2”); break; case R.id.num3: editText.append(“3”); break; case R.id.num4: editText.append(“4”); break; case R.id.num5: editText.append(“5”); break; case R.id.num6: editText.append(“6”); break; case R.id.num7: editText.append(“7”); break; case R.id.num8: editText.append(“8”); break; case R.id.num9: editText.append(“9”); break; case R.id.point: if(editText.getText().toString().equals(“”)){ //입력부분이 빈칸인 상태에서 소수점을 입력할경우 editText.append(“0”); } else if(editText.getText().toString().contains(“.”)){ break; } editText.append(“.”); //소수점 추가 break; case R.id.whole: //음수/양수 변환 if(!editText.getText().toString().equals(“”)){ float numtmp = Float.parseFloat(strtmp); numtmp *= (-1); editText.setText(setNum(numtmp)); //입력부분에 적용 } break; } }//num end public void symbol(View v){ //기호 입력시 실행 String strtmp = editText.getText().toString(); //입력부분을 문자열로 전환한다 if(rule.equals(“=”) || rule.equals(“error”)){ //전에 입력한 기호가 등호이거나 에러인 경우 initialize(); } if(!strtmp.equals(“”)) { //입력 부분이 빈칸이 아닌경우 if (!check) { float numtmp = Float.parseFloat(strtmp); if (value1 == 0) { value1 = numtmp; editText.setText(setNum(value1)); } else { value2 = numtmp; calculate(); } textView.append(setNum(numtmp)); } switch (v.getId()) { //기호 입력 case R.id.divide: if ((Float.parseFloat(strtmp) == 0 && rule.equals(“÷”))) { //입력부분의 숫자가 0이고 지금 누른 기호가 나누기인 경우 textView.setText(“”); editText.setText(“0을 나눌수는 없습니다.”); rule = “error”; break; } rule = “÷”; break; case R.id.multiply: rule = “×”; break; case R.id.minus: rule = “-“; break; case R.id.plus: rule = “+”; break; } } else { //빈칸인 경우 메시지 출력 Toast.makeText(this,”숫자를 입력하세요.”, Toast.LENGTH_SHORT).show(); } if(check){ String tvtmp = textView.getText().toString(); //뷰에 있는 문자열을 받아옴 tvtmp = tvtmp.substring(0, tvtmp.length()-1); textView.setText(tvtmp+rule); //두번째 누른 기호 입력 } else { textView.append(rule); } check=true; //기호입력체크 }//end public void equal(View v){ //등호의 경우 String strtmp = editText.getText().toString(); if(!rule.equals(“”)&&!check){ //입력부분이 빈칸이 아니면서 직전에 기호를 입력하지 않은 경우 check=false float numtmp = Float.parseFloat(strtmp); //입력 부분 숫자로 전환 if(!rule.equals(“”)){ if(rule.equals(“÷”)&&numtmp ==0){ //직전 기호가 나누기이고 입력 부분이 0인 경우 오류 editText.setText(“오류”); textView.setText(“”); rule=”error”; return; } value2=numtmp; //두번째 값에 숫자를 넣음 textView.append(setNum(numtmp)+”=”);//뷰 부분에 추가 calculate(); //계산 value1 = 0; //초기화 rule=”=”; //등호 입력 표시 check=true; //기호 입력 표시 } } } // equal end private void initialize(){ //초기화 함수 rule=””; textView.setText(“”); editText.setText(“”); value1 =0; value2 =0; check=false; }//initialize end public void calculate(){ //계산함수 switch(rule){ case “÷”: value1=value1/value2; break; case “×”: value1=value1*value2; break; case “-“: value1=value1-value2; break; case “+”: value1=value1+value2; break; } editText.setText(setNum(value1)); value2=0; }//end public String setNum(float num){ String print; if(Float.toString(num).endsWith(“.0”)) //소숫점아래 숫자가 없는 경우 (문자열이 .0으로 끝나는 경우) print=String.valueOf((int)num); //int형으로 문자열 변환 else //소숫점 아래 숫자가 있는 경우 print = String.valueOf(num); //float형으로 문자열 변환 return print; //문자열리턴 }//end }//class END
코틀린 안드로이드 – 계산기2(layout,계산기 기능)
저번에 이어서 layout부분 추가 부분
계산기 계산식이나오는 부분과 다른 drawble layout
layout
button_background_green.xml
drawable 폴더에 파일 만들기
result 버튼의 배경이 초록색인 버튼을 만들어준다.
전에 button_backgroun 코드를 복사해서 붙여넣기고 색깔들을 바꿔준다.
< ripple android: color = " @color/greenPress " xmlns: android = " http://schemas.android.com/apk/res/android " > < item android: id = " @android:id/background " > < shape android: shape = " rectangle " > < solid android: color = " @color/green " /> < corners android: radius = " 100dp " /> < stroke android: width = " 1dp " android: color = " @color/greenPress " /> shape > item > ripple >
activity_main.xml
< androidx.appcompat.widget.AppCompatButton android: id = " @+id/btn_result " android: layout_width = " wrap_content " android: layout_height = " match_parent " android: layout_margin = " 7dp " android: background = " @drawable/button_background_green " android: onClick = " resultButtonClicked " android: stateListAnimator = " @null " android: text = " = " android: textColor = " @color/white " android: textSize = " 24sp " />
result 버튼에 id를 부여하고 만들어준 배경을 적용하고 글자색을 변경해준다.
이제 계산식을 나타내는 TextView와 결과를 보여주는 TextView를 만들자
< View android: id = " @+id/topLayout " android: layout_width = " 0dp " android: layout_height = " 0dp " app: layout_constraintBottom_toTopOf = " @id/keypadTableLayout " app: layout_constraintEnd_toEndOf = " parent " app: layout_constraintStart_toStartOf = " parent " app: layout_constraintTop_toTopOf = " parent " app: layout_constraintVertical_weight = " 1 " /> < TextView android: id = " @+id/txt_expression " android: layout_width = " 0dp " android: layout_height = " wrap_content " android: layout_marginStart = " 15dp " android: layout_marginTop = " 44dp " android: layout_marginEnd = " 15dp " android: gravity = " end " android: textColor = " @color/black " android: textSize = " 30sp " app: layout_constraintEnd_toEndOf = " parent " app: layout_constraintStart_toStartOf = " parent " app: layout_constraintTop_toTopOf = " parent " /> < TextView android: id = " @+id/txt_result " android: layout_width = " 0dp " android: layout_height = " wrap_content " android: layout_marginStart = " 15dp " android: layout_marginEnd = " 15dp " android: layout_marginBottom = " 15dp " android: gravity = " end " android: textColor = " #aaaaaa " android: textSize = " 20sp " app: layout_constraintBottom_toTopOf = " @id/keypadTableLayout " app: layout_constraintEnd_toEndOf = " parent " app: layout_constraintStart_toStartOf = " parent " />
위와 같이 2개의 textView 선언을해준다 .
이쁘게 잘 만들어진다 !
계산기 기능 만들기
MainActivity.kt
버튼에 연결되어있는 함수들을 작성해본다.
앞에서 모든 버튼들에게 id를 부여하지 않았기 때문에 버튼을 부여하자!
숫자들은 btn_0 btn_1 …btn_9 이런식으로 달았고
연산자들은 btn_plus , btn_minus, btn_div, btn_mod 이렇게 지정했다.
buttonClicked() 함수
버튼이 여러개기 때문에 when 문을 이용해서 각각 버튼마다 명령을 지정해준다.
fun buttonClicked(v: View) { when (v.id) { R.id.btn_0 -> numberButtonClicked(“0”) R.id.btn_1 -> numberButtonClicked(“1”) R.id.btn_2 -> numberButtonClicked(“2”) R.id.btn_3 -> numberButtonClicked(“3”) R.id.btn_4 -> numberButtonClicked(“4”) R.id.btn_5 -> numberButtonClicked(“5”) R.id.btn_6 -> numberButtonClicked(“6”) R.id.btn_7 -> numberButtonClicked(“7”) R.id.btn_8 -> numberButtonClicked(“8”) R.id.btn_9 -> numberButtonClicked(“9”) R.id.btn_plus -> operatorButtonClicked(“+”) R.id.btn_minus-> operatorButtonClicked(“-“) R.id.btn_multi -> operatorButtonClicked(“X”) R.id.btn_div -> operatorButtonClicked(“/”) R.id.btn_mod -> operatorButtonClicked(“%”) } }
string을(숫자) 인자로 가지는 nubmerButtonClicked() 함수를 만들어 주고 숫자버튼이눌렸을때 숫자를 처리하는 함수가 실행되게 한다.
string을(연산자) 인자로 가지는 operatorButtonClicked()함수를 만들어 주고 연산자 버튼이 눌렸을때 연산자를 처리하는 함수가 실행되게 한다.
class MainActivity : AppCompatActivity() { private val expressionTextView: TextView by lazy { findViewById < TextView > (R.id.txt_expression) } private val resultTextView: TextView by lazy { findViewById < TextView > (R.id.txt_result) }
TextView들을 선언해준다.
numberButtonClicked()
private fun numberButtonClicked(number: String) { if (isOperator){ expressionTextView.append(” “) } isOperator =false val expressionText = expressionTextView.text.split(” “) if(expressionText.isNotEmpty()&& expressionText.last().length >= 15){ Toast.makeText(this,”15자리 까지만 사용할수 있습니다.”,Toast.LENGTH_SHORT).show() return } else if (expressionText.last().isEmpty()&& number ==”0″){ Toast.makeText(this,”0은 제일앞에 올 수 없습니다.”,Toast.LENGTH_SHORT).show() } expressionTextView.append(number) // TODO resultTextView실시간으로 계산결과를 넣음 resultTextView.text = calculateExpression() }
계산식에서 숫자와 연산자를 공백으로 구분한다. 따라서
split함수를 이용해서 계산식의 string을 공백으로 자른다.
expressionText를 선언.
hasOperator – 계산식에 operator가 있는지 없는지
isOperator – operator를 작성하고있는지 아닌지
변수를 선언한다.
연산자가 선언되고 난뒤에 숫자를 기입하면 한칸 띄워주고 숫자를 추가해준다.
계산식의 숫자가 15자리이상이면 Toast메세지를 출력해준다.
숫자칸이 비어있을때 0이 최초로 입력되면 Toast메세지를 출력해준다.
operatorButtonClicked()
expressionTextView.text = text.dropLast(1)
text의 맨마지막 글자 하나를 drop해준다(없에준다). 숫자를 늘린만큼 사라진다.
이걸로 계산식에 operator가 있는데 다시 operator를 누르면 전의 opertaor를 없에주고 새로운 operator을 추가해준다.
계산식에서 연산자가 이미 쓰인경우는 Toast 메세지를 띄워주고 끝낸다.
뒤 두개가 다 아닌경우에는 textView에 한칸띄고 operator를 입력해준다.
SpannableStringBuilder()
text를 인자로 받는 함수이다. String의 색깔을
setSpan을 통헤서 지정한 text값을 통해 text값의 색을 변경해줄수있다.
val ssb = SpannableStringBuilder(experssionTextView.text)
ssb.setSpan(ForegroundColorSpan(getColor(R.color.green)),
expressionTextView.text.lenght-1, expressionTextView.text.lenght, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
를 입력된 계산식에서 현재 operator 가 입력될때 text의 맨마지막 인 operator의 색깔을 green으로 바꿔준 ssb라는 text를 setSpan하주는 것이다.
operator가 입력이됬기때문에 계산식에 operator가 있다는 isOperator와 hasOperator를 True로 바꿔준다.
calculateExpression()
private fun calculateExpression():String{ val expressionTexts = expressionTextView.text.split(” “) if(hasOperator.not() || expressionTexts.size != 3){ return “” } else if (!expressionTexts[0].isNumber().not() || expressionTexts[2].isNumber().not()){ return “” } val exp1 = expressionTexts[0].toBigInteger() val exp2 = expressionTexts[2].toBigInteger() val op = expressionTexts[1] return when(op){ “+” ->(exp1+exp2).toString() “-“->(exp1-exp2).toString() “X”->(exp1*exp2).toString() “%”-> (exp1%exp2).toString() “/”->(exp1/exp2).toString() else-> “” } }
계산식에 있는 숫자와 연산자를 가지고와서 계산을 해준 String 반환해주는 함수
아직 연산자를 입력하지 않았거나 2개의 숫자요소와 1개의 연산자가 없으면 빈 String를 return 해줘서 예외처리를 해준다.
그리고 계산식의 첫번째 요소(숫자)와 세번째 요소(숫자)가 숫자가 아닌경우를 위해서 숫자임을 확인하는 함수를 만든다. kotlin에는 isNumber함수가 없다. 따라서 만든다!!
String.isNumber()
fun String.isNumber():Boolean{ return try{ this.toBigInteger() true }catch (e:NumberFormatException){ false } }
String을 확장하는 확장함수를 만든다.
앞에 객체가 오고 .함수명 으로 하면 객체를 확장하는 함수를 만들수있다. 오호!
String을 toBigInteger()로 Integer로 만든다(BigInteger는 무한대까지 변환가능)
try catch 문으로 toBigInteger가 성공하면 true를 반환하고 제대로 치환이 안되면 NumberFormatException을 반한하기때문에
NumberFormatException이 발생했을때 false를 반환하게 한다!!
위 함수로 숫자여야되는 값이 숫자가 아닌경우 빈 String를 반환해준다.
return 문제 when을 사용해서 op값에 따라서 계산을 해준 값을 return 해준다. return문에 바로 when문을 이용하는거 매우 좋은거같다.
여기까지하면 숫자와 연산자가 입력이된다
clear x 계산결과 x
clearButton()
fun clearButtonClicked(v: View) { expressionTextView.text=”” resultTextView.text =”” isOperator =false hasOperator = false }
계산식과 결과창을 빈string으로 만들어주고 isOperator와 hasOperator를 false로 바꿔주는 것으로 끝!
resultButtonClicked()
fun resultButtonClicked(v: View) { val expressionTexts = expressionTextView.text.split(” “) if (expressionTextView.text.isEmpty() || expressionTexts.size == 1) { return } if (expressionTexts.size != 3 && hasOperator) { Toast.makeText(this, “수식을 완성해주세요”, Toast.LENGTH_SHORT).show() return } if (expressionTexts[0].isNumber().not() || expressionTexts[2].isNumber().not()) { Toast.makeText(this, “오류가 발생했습니다.”, Toast.LENGTH_SHORT).show() return } val expressionText = expressionTextView.text.toString() val resultText = calculateExpression() resultTextView.text =”” expressionTextView.text = resultText isOperator = false hasOperator = false }
연산결과를 보여주는 함수 result버튼을 누르면 예외처리로 Toast메세지를 띄워준다.
첫번째 예외처리 – 계산식이 입력되지 않았거나 숫자만 하나 입력됬을때
두번째 예외처리 – 숫자와 연산자만 입력되었을때
세번째 예외처리 – 숫자로 입력받아야할 것들이 숫자가 아닐경우
예외처리가 끝난뒤에는 계산식 textView에는 결과를 넣어주고 결과창은 빈칸으로 바꿔준다.
expressionText와 resultText를 변수로 만들어서 저장한것은 따로 DB에 저장해주기위해서이다.
MainActivity.kt 전체 코드
class MainActivity : AppCompatActivity() { private val expressionTextView: TextView by lazy { findViewById < TextView > (R.id.txt_expression) } private val resultTextView: TextView by lazy { findViewById < TextView > (R.id.txt_result) } private var isOperator = false private var hasOperator = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } fun buttonClicked(v: View) { when (v.id) { R.id.btn_0 -> numberButtonClicked(“0”) R.id.btn_1 -> numberButtonClicked(“1”) R.id.btn_2 -> numberButtonClicked(“2”) R.id.btn_3 -> numberButtonClicked(“3”) R.id.btn_4 -> numberButtonClicked(“4”) R.id.btn_5 -> numberButtonClicked(“5”) R.id.btn_6 -> numberButtonClicked(“6”) R.id.btn_7 -> numberButtonClicked(“7”) R.id.btn_8 -> numberButtonClicked(“8”) R.id.btn_9 -> numberButtonClicked(“9”) R.id.btn_plus -> operatorButtonClicked(“+”) R.id.btn_minus -> operatorButtonClicked(“-“) R.id.btn_multi -> operatorButtonClicked(“X”) R.id.btn_div -> operatorButtonClicked(“/”) R.id.btn_mod -> operatorButtonClicked(“%”) } } private fun numberButtonClicked(number: String) { if (isOperator) { expressionTextView.append(” “) } isOperator = false val expressionText = expressionTextView.text.split(” “) if (expressionText.isNotEmpty() && expressionText.last().length >= 15) { Toast.makeText(this, “15자리 까지만 사용할수 있습니다.”, Toast.LENGTH_SHORT).show() return } else if (expressionText.last().isEmpty() && number == “0”) { Toast.makeText(this, “0은 제일앞에 올 수 없습니다.”, Toast.LENGTH_SHORT).show() return } expressionTextView.append(number) resultTextView.text = calculateExpression() } private fun operatorButtonClicked(operator: String) { if (expressionTextView.text.isEmpty()) { return } when { isOperator -> { val text = expressionTextView.text.toString() expressionTextView.text = text.dropLast(1) + operator } hasOperator -> { Toast.makeText(this, “연산자는 한번만 사용할 수 있습니다.”, Toast.LENGTH_SHORT).show() return } else -> { expressionTextView.append(” $operator”) } } val ssb = SpannableStringBuilder(expressionTextView.text) ssb.setSpan( ForegroundColorSpan(getColor(R.color.green)), expressionTextView.text.length – 1, expressionTextView.text.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ) expressionTextView.text = ssb isOperator = true hasOperator = true } fun resultButtonClicked(v: View) { val expressionTexts = expressionTextView.text.split(” “) if (expressionTextView.text.isEmpty() || expressionTexts.size == 1) { return } if (expressionTexts.size != 3 && hasOperator) { Toast.makeText(this, “수식을 완성해주세요”, Toast.LENGTH_SHORT).show() return } if (expressionTexts[0].isNumber().not() || expressionTexts[2].isNumber().not()) { Toast.makeText(this, “오류가 발생했습니다.”, Toast.LENGTH_SHORT).show() return } val expressionText = expressionTextView.text.toString() val resultText = calculateExpression() resultTextView.text =”” expressionTextView.text = resultText isOperator = false hasOperator = false } private fun calculateExpression(): String { val expressionTexts = expressionTextView.text.split(” “) if (hasOperator.not() || expressionTexts.size != 3) { return “” } else if (expressionTexts[0].isNumber().not() || expressionTexts[2].isNumber().not()) { return “” } val exp1 = expressionTexts[0].toBigInteger() val exp2 = expressionTexts[2].toBigInteger() val op = expressionTexts[1] return when (op) { “+” -> (exp1 + exp2).toString() “-” -> (exp1 – exp2).toString() “X” -> (exp1 * exp2).toString() “%” -> (exp1 % exp2).toString() “/” -> (exp1 / exp2).toString() else -> “” } } fun clearButtonClicked(v: View) { expressionTextView.text = “” resultTextView.text = “” isOperator = false hasOperator =false } fun historyButtonClicked(v: View) { } } fun String.isNumber(): Boolean { return try { this.toBigInteger() true } catch (e: NumberFormatException) { false } }
계산도 잘되고 예외 처리도 잘된다.
새로 배운 것
Spannable
Spannable은 텍스트에 부분적으로 효과를 적용할때 사용된다.
setSpan( 적용할 효과, 효과의 시작, 효과의 끝, 문자열 추가시 span값 적용 유뮤) 의 인자를 가지고있다.
효과
ForegroundColorSpan- 색깔
UnderlineSpan – 밑줄
AbsoluteSizeSpan – 텍스크 크기
효과지정 시작과끝 – 배열과같이 시작값은 0
마지막 인자 – span이 적용된 좌우측에 문자열이 추가될때 이 span값을 적용할 것인지 아닌지 정한다.
SPAN_EXCLUSIVE_EXCLUSIE : 왼쪽제거, 오른쪽 제거
SPAN_EXCLUSIVE_INCLUSIVE : 왼쪽 제거 오른쪽 포함
위처럼 EXCLUSIVE는 제거 , INCLUSIVE는포함으로 표현횐다.
onClick ViewBind
layout에서 버튼이나 다른 onClick이되는 것들에 대해서
android :onClick=”액티비티에 정의해둔 함수”
로 함수를 연결해준다. 액티비티에서 onClickListner를 사용하지 않아도 된다.
Activity에서는
함수명(v View) { 원하는 기능 }
현재 View를 참조해서 함수를 만든다.
버튼이 많은 경우에는 이런방식이 확실히 유용한듯 잘 알아두자
Text Drop
expressionTextView.text = text.dropLast(1)
위와 같이 TextView의 text의 글자를 원하는 만큼 drop할 수 있다.
확장함수
fun String.isNumber():Boolean{ }
이처럼 String객체를 확장하는 함수를 만들어줄 수가있다.
isNumber처럼 없는 기능을 만들어 볼수도 있고 여러가지 쓸수있을거같다.
제대로 활용하려면 많이써봐야 할듯..
잘 만들어졌다.
다음 강의에서는 결과랑 계산식을 저장해서 history 기능을 구현한다고 한다. 화이팅~
키워드에 대한 정보 안드로이드 계산기
다음은 Bing에서 안드로이드 계산기 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 안드로이드 계산기앱 UI 만들기 [안드로이드 계산기 앱 – 자바 변수, 조건문, 메소드 #1]
- 안드로이드
- 안드로이드 스튜디오
- 안드로이드 강좌
- 안드로이드 앱 만들기
- 자바
- 코틀린
- 코딩기초
- 코딩강좌
- 코딩발전소
안드로이드 #계산기앱 #UI #만들기 #[안드로이드 #계산기 #앱 #- #자바 #변수, #조건문, #메소드 ##1]
YouTube에서 안드로이드 계산기 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 안드로이드 계산기앱 UI 만들기 [안드로이드 계산기 앱 – 자바 변수, 조건문, 메소드 #1] | 안드로이드 계산기, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.