오늘은 계산기 어플리케이션을 만들어 보도록 하겠습니다.
계산기는 어떠한 컴퓨터 언어를 사용하든 초반 예제로 대부분 사용을 하는듯 합니다.
여타 언어들로 계산기를 구성하는 것은 한가지의 언어로만 작성하기 때문에 쉽게 느껴지지만 안드로이드는 상황이 조금 다릅니다. 우선 UI를 구성하고 UI와 관련된 여러 위젯들의 기능을 다시 java로 구성을 해야되기 때문에 두번 일을 하는듯한 느낌이며, 제 경험상 초반에 개념을 잘 못 잡으면 결국 애플리케이션이 산으로 가고 마는게 안드로이드 개발인것 같습니다.
각설하고!, 프로젝트를 새로 생성하고 화면구성부터 시작해야겠죠?
저는 이렇게 화면을 구성했습니다. 아래에 xml코드가 있긴 하지만 보기전에 혼자 해보는게 더 중요합니다!
코딩에 있어서 답은 하나가 아니기 때문에 코드를 보기전에 직접 한번 짜보시는걸 권장합니다!
힌트 키워드를 드리자면, LinearLayout, EditText, TableLayout입니다.
그럼 이제 Layout을 클릭하고 xml코드를 수정해봅시다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | <?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="com.tistory.redmuffler.blog_calculater.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="50dp" android:id="@+id/edit" /> <TableLayout android:layout_width="match_parent" android:layout_height="match_parent" android:stretchColumns="0,1,2,3"> <TableRow android:layout_weight="1"> <Button android:id="@+id/b_num7" android:layout_width="match_parent" android:layout_height="match_parent" android:onClick="num" android:text="7" /> <Button android:id="@+id/b_num8" android:layout_width="match_parent" android:layout_height="match_parent" android:onClick="num" android:text="8" /> <Button android:id="@+id/b_num9" android:layout_width="match_parent" android:layout_height="match_parent" android:onClick="num" android:text="9" /> <Button android:layout_width="match_parent" android:layout_height="match_parent" android:text="/" /> </TableRow> <TableRow android:layout_weight="1"> <Button android:id="@+id/b_num4" android:layout_width="match_parent" android:layout_height="match_parent" android:onClick="num" android:text="4" /> <Button android:id="@+id/b_num5" android:layout_width="match_parent" android:layout_height="match_parent" android:onClick="num" android:text="5" /> <Button android:id="@+id/b_num6" android:layout_width="match_parent" android:layout_height="match_parent" android:onClick="num" android:text="6" /> <Button android:layout_width="match_parent" android:layout_height="match_parent" android:text="*" /> </TableRow> <TableRow android:layout_weight="1"> <Button android:id="@+id/b_num1" android:layout_width="match_parent" android:layout_height="match_parent" android:onClick="num" android:text="1" /> <Button android:id="@+id/b_num2" android:layout_width="match_parent" android:layout_height="match_parent" android:onClick="num" android:text="2" /> <Button android:id="@+id/b_num3" android:layout_width="match_parent" android:layout_height="match_parent" android:onClick="num" android:text="3" /> <Button android:layout_width="match_parent" android:layout_height="match_parent" android:text="-" /> </TableRow> <TableRow android:layout_weight="1"> <Button android:layout_width="match_parent" android:layout_height="match_parent" android:text="del" /> <Button android:id="@+id/b_num0" android:layout_width="match_parent" android:layout_height="match_parent" android:onClick="num" android:text="0" /> <Button android:layout_width="match_parent" android:layout_height="match_parent" android:text="=" /> <Button android:layout_width="match_parent" android:layout_height="match_parent" android:text="+" /> </TableRow> </TableLayout> </LinearLayout> | cs |
저는 이렇게 xml코드를 구성했습니다. 오늘은 EditText에 숫자가 출력되게 하는것이 목표기 때문에 기타연산자에는 특별히 id값을 주지 않았습니다. 그리고 num이라는 onClick값으로 숫자를 다 묶어서 하나의 메소드안에서 button 이벤트를 처리할 계획입니다.
특별한 위젯의 속성을 말씀드리자면,
android:orientation="vertical" LinearLayout을 사용할때 반듯이 필요한 속성값입니다. LinearLayout은 쉽게 말해서 위젯을 가로 또는 세로로 정렬하는 레이아웃입니다. 때문에 속성값또한 vertical, horizontal 두개뿐입니다.
android:layout_weight="1" 이 기능은 소속된 layout의 비율을 조정해주는 기능입니다. 같은 위치(예를 들면 a, b 둘 다 하나의 LinearLaout에 속하는 경우)에 있고, 이 기능을 부과하는 위젯들끼리 비율을 조정해줍니다.
android:stretchColumns="0,1,2,3" 이 기능은 밑에 TableLayout의 칼럼의 간격을 조정하는 기능입니다. 좌측에서부터 0부터 시작을 합니다.
설명을 적어도 쉽게 설명을 못해드리는점 양해바랍니다ㅠ 작성자가 도대체 뭔소리를 하는지 모르겠다 싶으시면 안드로이드 디벨로퍼 에 접속하셔서 각 위젯들과 속성값을 보실 수 있습니다!!
이제 그럼 java 소스를 보도록 합시다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; public class MainActivity extends AppCompatActivity { EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText)findViewById(R.id.edit); } public void num(View v){ switch (v.getId()){ case R.id.b_num0: editText.append("0"); break; case R.id.b_num1: editText.append("1"); break; case R.id.b_num2: editText.append("2"); break; case R.id.b_num3: editText.append("3"); break; case R.id.b_num4: editText.append("4"); break; case R.id.b_num5: editText.append("5"); break; case R.id.b_num6: editText.append("6"); break; case R.id.b_num7: editText.append("7"); break; case R.id.b_num8: editText.append("8"); break; case R.id.b_num9: editText.append("9"); break; } } } | cs |
19번줄. View를 쓰면 아마 빨간색으로 글자가 표시되고 줄이 그어질겁니다. 이 문제는 View를 Import하지 않아서 생기는 현상입니다. Alt+Enter를 누르면 되지만 처음엔 모든것이 낯설기 때문에 밑에서 설명을 해드리겠습니다. (필자가 이 문제를 처음 접할 때 3시간 헤맨건 비밀)
그리고 switch 문을 사용해서 case 조건에는 각 버튼의 id 값을 입력합니다. 저는 append를 이용해서 editText에 문자를 추가하는 방법으로 구현을 했습니다.
실행화면입니다. 참 쉽죠잉~~~
내일은 연산자버튼에 기능을 추가해서 계산이 가능한 계산기를 만들어 보도록 하겠습니다. 수고하셨습니다!!
--View가 빨간색으로 표시되어 있을때--
요렇게 뜰겁니다. 바로 Alt + Enter를 누르면 import가 되지만 타이밍을 놓칠수도 있습니다.
그러면 그냥 View로 커서를 이동시키고 Alt + Enter를 누릅니다. 그럼 위 사진처럼 창이 뜰건데 저기서 import class를 누르면 됩니다!
상단에 보시면 import android.view.View가 추가된것을 확인 할 수 있습니다!
추가적으로 말씀을 드리자면 java 소스에서 문자가 회색으로 변하는건 해당 변수 또는 메소드를 사용하지 않았다고 표시해주는것이고 빨간색으로 표시되면 어딘가 문제가 있다고 표시하는겁니다. 빨간색이 무서운 겁니다 여러분..ㅠㅠ
'무한코딩 > 안드로이드 어플리케이션' 카테고리의 다른 글
[날지 무한코딩] minSdkVersion 에러 해결법 (2) | 2020.10.26 |
---|---|
MacOS 환경에서 Android studio 설치하기 (0) | 2020.02.01 |
[날지 무한코딩] WebView 만들기, WebView에 터치이벤트 주기 (0) | 2018.03.20 |
[날지 무한코딩] 안드로이드 스튜디오 액티비티 만들기, 액티비티 이동 (2) | 2017.03.16 |
[날지 무한코딩] 안드로이드 스튜디오 버튼(Button) 만들기 (1) | 2017.03.02 |
[날지 무한코딩 안드로이드 어플리케이션 제작] - 3일차 (프로젝트 생성) (0) | 2016.12.23 |
[안드로이드]EditText 커서 및 밑줄 수정 (0) | 2016.07.29 |