Mobile
[Android] 음악 재생 플레이어 만들기
[Android] 음악 재생 플레이어 만들기
2021.11.21몇 가지 기능이 있는 음악 재생 플레이어를 만들어보자. 소스코드 더보기 package kr.ac.cnu.computer.seekbar; import android.media.MediaPlayer; import android.view.View; import android.widget.ImageButton; import android.widget.SeekBar; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity {..
[Android] 리스트 보여주기
[Android] 리스트 보여주기
2021.11.21여러 개의 리스트를 보여주기 위해서 어떻게 해야 할까? 이 때 리스트 뷰와 리사이클러 뷰를 사용할 수 있다. (요즘은 리사이클러 뷰를 더 많이 사용하는 추세임) 리스트 뷰는 수평으로만 리스트를 보여줄 수 있지만, 리사이클러 뷰는 수평과 수직 방향 모두 사용할 수 있다. 잠시 핸드폰에서 설정 버튼을 누르고 화면 소리 등 여러가지 설정을 한다고 생각해보자. 리스트들이 수평 방향으로 보여지는데, 보여주는것에서 끝나지 않고 리스트들 중 하나를 선택해 세부 설정으로 접근해야 한다. 이 때 쓰이는 게 선택 위젯이다. 리스트를 보여주는 것과 리스트의 정보를 관리하는 건 서로 차이가 있다. 보여주는 동작은 위젯이 처리하고 정보 관리는 어댑터 클래스가 처리한다. 즉, 여러 개의 리스트 중에서 하나를 선택하는 방식의 선택..
[Android] 쓰레드와 핸들러
[Android] 쓰레드와 핸들러
2021.11.12메인액티비티는 화면을 가지고, 이벤트가 발생했을 때 처리해 주는 역할을 수행한다. 메인액티비티에는 메인 쓰레드가 만들어져 있고, 이벤트가 발생해 이벤트 큐에 저장된 이벤트들을 메인쓰레드가 하나씩 실행시킨다. (메인액티비티에는 하나의 프로세스가 있고, 프로세스 안에 쓰레드가 있다.) 메인 이벤트가 한 가지 일을 처리하고 있을 때, 그 일처리가 끝나기 전에는 다른 동작을 할 수 없다. 예를 들면, 버튼을 눌렀을 때 용량이 큰 파일 하나를 다운받는 프로그램을 만들었다고 하자. 이 때 파일의 다운로드가 끝나기 전까지 화면의 어떤 버튼을 눌러도 화면이 바뀌지 않고 멈춘 상태를 유지한다. 이 때 쓰레드를 하나 더 만들어 위 상황을 해결할 수 있다. 메인 쓰레드가 하는 일을 별도로 쓰레드를 만들고 그 쓰레드에게 지정..
[Android] 서비스와 브로드캐스트 수신자
[Android] 서비스와 브로드캐스트 수신자
2021.11.06안드로이드 앱을 구성하는 네 가지 요소 중 액티비티에 대해서는 지금까지 살펴봤고, 이제 서비스와 브로드캐스트에 대해 알아보자. 액티비티와 달리 서비스와 브로드캐스트는 화면을 담당하지 않는다. 문자메세지가 도착했을 때 내가 만든 앱에서 수신하게 하고 싶을 때 브로드캐스트를 사용한다. 서비스 서비스는 액티비티와 달리 화면이 없는 상황에서 백그라운드에서 실행되고, 프로세스가 종료돼도 시스템에서 자동으로 재시작한다. 매니페스트 파일에서 태그를 사용해 선언한다. (개발 도구로 생성 시 보통 자동으로 추가됨) onCreate() : 서비스가 만들어 질 때 해야 할 일을 이쪽에 정의한다. onStartCommand() : 서비스가 호출될 때 마다 해야 할 일을 정의한다. onDestroy : 서비스가 종료될 때 해야..
[Android] 인텐트와 프로그레스바 사용하기
[Android] 인텐트와 프로그레스바 사용하기
2021.10.28프로그레스 바를 사용해 보고 인텐트를 통해 화면 전환 동작을 수행하는 앱을 만들어 보자. 소스코드 더보기 // MainActivity package kprogressbar; import android.content.Intent; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import org.w3c.dom.Text; public class Ma..
[Android] 여러 화면 간 전환
[Android] 여러 화면 간 전환
2021.10.25처음 안드로이드 프로젝트를 생성하면, XML파일(activity_main.xml)과 자바 소스 파일(MainActivity.java)이 생성된다. 자바 소스코드의 R.layout.activity_main 코드는 이 두 파일을 연결해준다. (R은 res폴더를, layout은 res폴더 안의 layout폴더를 의미함) 인플레이션은 XML 레이아웃에 정의된 내용(디자인도구를 이용해 만든 버튼, 텍스트뷰 등..)이 메모리에 객체화 되는 과정을 말한다. (버튼의 상태를 정의) 자바 코드에 정의하고, 실제로 객체가 되려면 메모리에 기억장소를 할당받아야 한다. 그 역할을 인플레이션이라고 한다. MainActivity 코드에서 setContentView가 인플레이션 과정을 수행한다. 위의 코드에서 setContentV..
[Android] 대화상자 사용하기
[Android] 대화상자 사용하기
2021.10.18대화 상자는 사용자에게 메세지를 출력하고 사용자로부터 입력을 받아들이는 사용자 인터페이스이다. 대화 상자는 Dialog클래스를 상속받는다. 여러 가지 종류의 대화 상자가 있으니 상황에 맞게 잘 찾아쓰자. 해당하는 클래스의 객체를 만들고 메서드들을 이용해서 원하는 기능을 구현하는 큰 틀은 똑같다. (사실 이렇게 무슨 기능이 있는지 배워나가는 것보다, 만들고 싶은 프로젝트가 있으면 그 프로젝트를 진행하면서 필요한 건 강의나 책을 찾아서 배우는 방법이 훨씬 나은 방법인것 같다.) 그래도 배운건 정리해야하니까.. 계속 정리해 보면 프로그레스 바를 만들 때 setIndeterminant() 메서드에서 false를 매개변수로 받을시 언제 끝날 지 예상이 가능함을 의미하고 true를 매개변수로 받을 시 언제 끝날 지..
[Android] 간단한 계산기 만들기
[Android] 간단한 계산기 만들기
2021.10.18덧셈만 가능한 간단한 계산기를 만들어보자. 더보기 package kr.ac.cnu.computer.cp2_05; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import org.w3c.dom.Text; public class MainActivity extends AppCompatActivity { String prevstr = ""; int intresult = 0; int pluscount = 0; boolean pluscheck = false..
[Android] 이벤트 처리
[Android] 이벤트 처리
2021.10.18버튼을 눌렀을 때 목차가 열리고 숫자가 추가되는 등 다양한 기능을 수행하게 하기 위해서 버튼에 대한 이벤트 처리가 필요하다. 리스너를 구현해 특정 행동에 대한 이벤트를 처리할 수 있다. 한 버튼에 대해 이벤트가 발생하고, 오버라이딩 된 메서드를 호출해 이벤트를 처리하는 방식으로 동작한다. public class MainActivity extends AppCompatActivity { String prevstr = ""; int intresult = 0; int pluscount = 0; boolean pluscheck = false; String tempstr = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCrea..
[Android] 텍스트뷰
[Android] 텍스트뷰
2021.10.12글자를 넣고 싶을 때 사용하는 뷰가 텍스트뷰이다. 기본이 되는 뷰라서 자주 사용한다. 텍스트뷰에 글자를 추가하는 방법으로는 키보드를 통해서 입력하는 방법도 있지만, 글자를 strings.xml파일로 분리해 따로 저장하게 하는 방법도 있다. xml 레이아웃에서는 화면의 모양만 정의하도록 하고 글자의 구성은 다른 곳에서 정의하도록 하는 방법인데, 이렇게 함으로써 여러 가지 장점을 얻을 수 있다. 앱을 만들 때 한국어는 물론 영어 등 다른 나라의 언어까지 서비스한다고 할 때, 여러 가지의 xml레이아웃 파일을 만드는 것 보다 strings.xml파일을 언어별로 만들어 놓으면 훨씬 편하게 만들 수 있다. strings.xml파일은 /app /res /values 폴더 안에 있다. 안드로이드에서 다국어를 지원할 ..
[Android] Java 코드와 XML 레이아웃
[Android] Java 코드와 XML 레이아웃
2021.10.11디자인 화면에서 레이아웃과 버튼들을 만들고, 이를 XML파일에 연동시키는 방식으로 화면을 구성했다. 그런데, Java로 안드로이드를 개발한다고 했는데 Java는 언제 쓰이는걸까? MainActivity의 자바 소스코드이다. 코드를 잘 보면, setContentView 메서드를 호출하는 부분이 있다. 이 메서드를 호출하면서 activity_main의 xml파일을 매개변수로 전달해 레이아웃 파일이 소스 파일과 연결되고, 두 개의 파일이 서로 연결돼 하나의 화면을 만든다. 화면에 보이는 레이아웃 소스코드와 자바 소스코드는 분리돼있다. 레이아웃 소스코드는 화면 모양을 결정하고, 자바 소스코드는 기능을 부여하는 역할을 한다. 물론, 필요에 따라 자바 소스코드에서 화면 레이아웃을 구성하는 경우도 있다. 두 가지 방..
[Android] 레이아웃 다루기
[Android] 레이아웃 다루기
2021.10.11Component Tree 에서 우클릭을 통해 기본으로 지정된 Constraint Layout을 수정할 수 있다. /app /res /layout 폴더를 통해 새로운 레이아웃을 만들 수 있다.