RecyclerView는 리스트가 재활용되어서 무한히 리스트를 사용할 수 있는 기능이다.

 

 

우선 프로젝트를 하나 만들어주고, 아래와 같이 설정해주었다.

 

 

 

build.gradle 에 들어가서, dependecies부분을 수정해주었다. 이를 통해 recyclerview를 사용할 수 있게 되었다.

 

 

 

다시 activity_main으로 돌아왔다.

12~21행: RecyclerView의 틀 완성

24~31행: 버튼 부분 구현

 

 

 

이제는 RecyclerView의 한 줄 당 들어갈 데이터를 설정해주기로 했다.

app>res>layout>new>Layout resource file 을 들어가서 파일을 하나 만들어주었다. 이름은 item_list로 설정.

 

 

 

RecyclerView에 나오는 리스트들을 설정해주기 위해서 다음과 같이 작업하였다.

가로로 보여주기 위해서 orientation을 horizontal로 설정하였다.

 

 

 

사진 옆쪽의 공간을 사용하기 위해서 다음과 같이 코드 설정을 해주었다.

match_parent를 사용해서 이미지 옆쪽에 틀을 만들고, 글을 추가했을 때, 세로방향을 추가되도록 vertical 속성을 추가하였다.

 

 

 

텍스트뷰를 추가해주고, 이를 center_vertical로 정렬해주었다. 세로로 가운데 정렬을 해주었고, 최상위 부모 클래스의 height 값을 wrap_content로 변경해주었다.

 

 

 

기본적인 화면구성은 다 되었다. 이제, java파일을 연결해서 동적인 변화를 주도록 하자.

우선 item_list에 들어갈 변수들을 선언 해주어야한다.

아래와 같이 폴더에다가 Java Class를 하나 생성해주자. 이름은 MainData로 만들었다.

 

 

 

안에다가 이렇게 아까 설정한 이름들을 변수로써 선언을 해주었다.

 

 

 

cmd + n을 눌러서 Generate 와 Getter and Setter을 설정해주었다. 이때, 세 개의 변수를 shift를 눌러서 한 번에 설정해주었다.

 

 

 

두 개 다 설정해주면 아래와 같이 결과가 나온다.

 

 

 

다음은 어댑터 작성을 할거다. 아래의 경로로 자바클래스를 만들어주자. 이름은 MainAdapter.

 

 

 

public class MainAdapter 뒤에다가 extends를 입력하고 쭉 입력해주고, 빨간 에러 뜨면, implement를 클릭하면 다음과 같이 한 번에 코드가 설정이 된다.

 

 

 

아직 오류가 뜬 CustomViewHolder는 Create class 버튼을 눌러 주고 , Make ~~ extends를 눌러서 해결해주자. 

 

 

 

이제 public class~~ 아래 쪽에 코드를 넣어주자.

아까 listView의 데이터들을 array에 담아주기 위해 ArrayList를 사용하고, MainData (iv_profile, tv_name, tv_content)를 이용하기 위해 <MainData>라고 입력해주었다. 그리고 이 ArrayList<MainData> 의 이름을 arrayList로 명명했다.

 

 

 

그리고 public class CustomeViewHolder ~~ 아래쪽에다가 다음과 같이 적어주었다.

 

 

 

ArrayList아래에다가도 cmd+n 을 넣어서 constructor을 생성해주었다.

 

 

 

이제 코드를 하나씩 보자. onCreateViewHolder은 ListView가 처음으로 생성될 때의 생명주기를 의미한다.

ListView가 클릭되었을 때, 혹은 잘못 클릭되었을 때의 경우를 구현해주었다.

curName은 currentName으로 현재 선택된 리스트뷰를 의미한다.

 

 

 

이제 길게 클릭했을 때, 롱클릭했을 때 화면 구현을 해주자. 그리고 getItemCount()의 리턴값을 아래와 같이 수정해주었다.

 

 

 

롱클릭뷰를 눌렀을 때, 리스트뷰가 삭제되는 것을 구현해보자. getItemCount()아래에 remove 기능과 getItemCount의 위쪽의 롱클릭리스너에다가 다음과 같이 적어주었다. 여기까지하면 MainAdapter부분은 다 작성이 되었다. 이제 MainActivity부분으로 들어가자.

 

 

메인 엑티비티.java에서 recyclerView에서 변수를 선언해주고 변수들을 함수와 연결하면서, xml에서 설정했던 것과 동작을 연결해주었다.

 

 

이제 앱의 추가버튼 부분 기능구현을 해주자.

 

 

 

이어서 코드를 계속 작성해주었다. notifyDataSetChanged()는 새로고침 함수이다.

 

 

빌드를 해보았다.

추가를 누르면, 내가 설정한 이미지들이 나오고, 많이 누르면 스크롤뷰가 가능하며, 각 리사이클러뷰를 길게 누르면 삭제가 이루어진다.

동영상으로 남기고 싶어서 유튜브에 업로드했다!

www.youtube.com/watch?v=Mxf_nKFa3Bc

 

 

 

이번 시간에는 카메라 연동에 대해서 배워보자

 

늘 해왔던 것처럼 아래와 같이 레이아웃을 기본 세팅을 해주었다.

 

 

 

 

그 다음 자바 파일 수정을 해주었다.

이번 수업시간에는 코드를 일단 다 치고 설명하는 방식으로 진행하겠다고 하셨다.

 

 

 

 

 

여기까지 코딩해주고, 카메라 권한 허용 작업을 위해 manifest 도 다음의 권한 허용 코드 3줄도 추가를 해주었다.

 

 

 

 

그 다음 Gradle Script의 build.gradle 을 열어준다.

 

 

 

 

implementation 'gun0912.ted:tedpermission:2.0.0' 를 한 줄 쳐주고 우측 상단의 sync now를 클릭해서 다운로드를 받는다.

 

 

 

 

sync한 거를 활용하기 위해 다시 메인 엑티비티로 가서 다음과 같이 입력해주었다.

//권한체크
TedPermission.with(getApplicationContext())
.setPermissionListener(permissionListener)
.setRationalMessage("카메라권한이 필요합니다.")
.setDenialMessage("거부하셨습니다.")
.setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CAMERA)
.chech();

 

 

 

 

 

아직 permissionListener가 구현되지 않아서 빨간줄이 나타난다. 그래서 이를 구현해주기 위해 위 코드의 아랫줄에 아래와 같이 입력했다.

 

 

 

 

그리고 Permission 위에다가 이거를 쳤다.

사실 왜 하는지는 잘 모르겠는데, 설명은 마지막에 쭉 해준대서 그냥 들었다.

 

 

 

 

 

이것도 쳐줬다.

 

 

 

 

이제 xml파일을 하나 새로 만들어 주었다.

 

 

 

 

xml에다가는 다음과 같이 입력을 해준다.

 

 

 

 

그리고 AndroidManifest.xml에다가는 이렇게 코드를 넣어주었다.

 

 

 

 

사실 이거를 왜 해야만 하는지는 정확히 이해하기는 어려웠다.

어쩄거나 이 코드를 사용함으로 우리는 화면 가로세로 보기 조정, 카메라 권한 조정 

 

 

 

근데 문제는 실행이 안된다.

파일 경로가 잘못된걸까?

제대로 작성 다 했고 빌드 오류도 안뜨는데.....

일단 보류하고 내일 아침에 마저 수정해야겠다

 

직접 메뉴를 커스텀해서 구성해보자!

만들어져 있는 것은 한계가 있으니, 내 맘대로 커스텀하는 방법을 알면 유용할 것이다.

 

 

empty 프로젝트를 하나 만들고, activity_main.xml에서 아래처럼 DrawerLayout으로 변경을 먼저 해준다.

 

 

텍스트뷰를 삭제하고 LinearLayout과 버튼을 삽입해준다. 그러면 메인화면에 버튼이 하나 나타나게 된다.

 

 

그리고 우리는 레이아웃을 하나 더 만들기로 했다. 이름은 activity_drawer로 설정해주었다.

 

 

이 레이아웃으로는 실제 메뉴가 열렸을 때 상황을 생각해서 슬라이드 메뉴를 직접 만들어준다고 생각하면서 만들기로 했다. 

이것도 우선 LinearLayout으로 변경해주었다.

 

 

그 다음 슬라이드를 했을 때 나타날 메뉴의 크기와 색상을 설정해주었다.

 

 

버튼과 텍스트뷰도 만들어주었다. 그런데 하영로이드 메뉴도 안나타나고, LinearLayout에 오류가 뜬다.

 

 

이럴 때는 LinearLayout에 커서를 두고 alt+Enter을 눌러주면 추천 해결방법을 알려준다.

이유는 orientation을 설정하지 않아서였다. orientation을 vertical로 설정해주었더니 하영로이드도 잘 나타나고 오류도 없어졌다.

 

 

그리고 버튼 같은 모양은 꼭 Button이 아니라 LinearLayout을 활용해서도 만들 수 있다. 

test메뉴바를 LinearLayout을 통해 만들어봤다.

아 그리고 center값을 주었는데 글자정렬이 안되어서 자세히 봤더니 linearGravity가 아니라 그냥 gravity 로 설정했어야 했다.

그것도 수정해서 테스트메뉴바를 만들어보았다.

 

 

이번에는 메뉴버튼이 너무 커서 크기를 조절해보았다.

margin을 활용해서 적용했다.

 

 

이번에는 MainActivity.java에 수정을 해주었다.

private 으로 선언해주고, 오류뜬거는 import 해서 해결해주었다.

 

 

그 다음 실제 생명주기, 즉 앱이 실행 될 때 액션들을 설정해주었다.

우선 activity_main.xml에 아이디를 설정해주고,

 

 

LinearLayout이 끝나기 직전에 include를 해준다.

이것의 의미는, include한 activity_drawer은 java파일 같은 곳에서 바로 쓰이는 것이 아니라,  main.xml에서 얘를 연결시킨 것이다.

그래서 프리뷰보면, 파란색으로 인클루드한 것의 형태가 보인다.

 

 

다시 자바로 돌아와서, 아래와 같이 적어주고

 

 

오류는 아이디 설정을 안해줘서 나는 거니까 얼른 해주고 오자.

 

 

자바를 이렇게 마저 작성해주면, 이제 열려라참깨 버튼을 눌렀을 때, 네비게이션 메뉴가 열린다.

 

 

자바 코드를 마저 작성해주자. 오류가 생기는이유는 listener를 아직 정해주지 않아서이다.

 

 

코드는 자동완성으로 이렇게 쉽게 완성이 된다. 이곳에서는 drawer을 슬라이드했을 때, 상태값을 받아오는 곳이다.

슬라이드했을 때, 오픈했을때, 상태했을때, 오픈한거를 닫았을 때 등의 상황에서 원하는 기능을 추가하면 된다.

 

 

마저 코드를 써주었다. 

닫았을 때 행동들을 코드로 정해주었다.

사실 조금 복잡해서 100프로 이해한거는 아니었지만, 코드를 보면 어떤 기능을 수행할지 정도는 보여서 일단 직접 코드를 쳐보고 넘어갔다.

 

 

빌드화면!

버튼을 눌러서 나타나도 되고 옆쪽을 드래그해서 슬라이드해서 열수도 있다.ㅎㅎ

 

 

10강 끝!!

웹뷰는 자신이 안드로이드 화면에서 자신이 원하는 인터넷 주소 등을 띄울 수 있는 기능이다.

활용도 높고 실무에도 정말 많이 쓴다고 한다.

 

 

우선 Lineare Layout으로 바꿔주고, match_parent해준다음 아이디를 부여해준다.

 

 

webView해줄 url을 설정해주고,

 

 

아이디값을 설정해준 다음, 웹뷰 설정을 해주었다.

자바스크립트 사용가능하게 설정한다음, 

구글크롬에서 실행되도록 설정해주고, 일반적인 웹뷰도 가능하도록 다 설정을 해준다.

 

 

폰을 뒤로가기 해서 종료했을 때, 정상적으로 종료되도록 설정도 해주자.

 

 

이제 에러도 없애보자. alt + enter를 눌러서 inner 클래스를 하나 생성을 해준다,

 

 

새로 생성된 곳에다가 ctrl + o를 눌러서, shouldoveride어쩌고를 쳐서 맨위에꺼를 클릭해준다.

 

 

그럼 이렇게 나온다. 

 

 

그거를 이렇게 변경해준다. 이 should어쩌고는 현재페이지의 url을 가져오는 기능이다. 자주 사용되는 메소드이다.

 

 

빌드하기 전에 manifest의 안드로이드 manifest들어가서 인터넷 권한을 설정해준다.

 

빌드해보자!

오..너무 신기하다

 

9강도 끝!!

sharedPreferences는 앱을 종료하더라도 앱을 재실행했을 때, 저장시켜야 할 데이터들이 그대로 있는 기능을 구현해주는 함수이다.

앱을 지우기 전까지 계속 남아있는 데이터들을 설정하기 위한 기능이다.

 

우선 empty 프로젝트를 새로 하나 만들어준다.

 

 

리니어 레이아웃으로 변경해주고, 텍스트뷰를 지우고 에딧텍스트를 하나 삽입한다.

 

 

아이디를 지어주고 java로 이동해서 서로 연결해준다.

 

sharedPreference도 설정해주었다.

 

 

onCreate만 했는데, onDestroy도 만들거다.

뒤로가기나 앱을 나갔을 때, 데이터가 날라가지 않도록 저장하고 나가기를 실행하도록 설정해 줄 예정이다.

 

우선 다음과 같이 입력해준다.

crtl + o 를 해줘서  onDestroy를 찾아준다. 나갔을 때, 즉 액티비티를 벗어났을 때 행동을 설정해줄 수 있는 곳이다.

 

 

sharedPreference 에 editor을 연결해주고,

editText에 현재 써져 있는 값을 받아와서 toString형태로 가져와서 저장하고,

editor에다가 받아온값을 그대로 적어주는 putString을 해준 다음, 

내가 원하는 문자열로 value값을 저장해준다.

 

 

아무튼 앱이 저렇게 Destory 되고 다시 앱을 틀면 onCreate로 나온다.

내가 설정한 위의 기능이 시행되도록 onCreate도 수정해주자,

 

 

이렇게 설정을 하면, 

내가 원하는 값을 입력하면, 키워드 yoon에다가 저장되고, 

뒤로가기로 앱을 나갔다 들어가도 내가 입력한 것 그대로 있다!

 

 

이 기능은 보통 설정에서 많이 쓴다고 한다.

8강 끝!!

 

 

 

 

메뉴바를 만들어보자.

 

새 프로젝트를 만들 때 empty 말고 navigation drawer을 선택한다.

 

 

그러면 기본으로 메시지 메뉴가 하단에 나타나는 것을 볼 수 있다.

 

 

하단 메시지 메뉴 바 관리 부분이다. 앱을 실행했을때는 oncreate 부분에서 관리한다.

 

스낵바는 토스트랑 비슷한 팝업 메시지 바인데 좀 더 업그레이드 버전이다.

 

 

실행시키면 이런 모양이다.

 

 

onbackpressed는 뒤로가기 버튼을 눌렀을 때 실행되는 액션들 설정부분.

 

 

메뉴 바 설정부분. 여기서 조작 하면 커스텀 네비게이션 메뉴를 만들 수 있다.

 

 

이미지도 미리 설정이 되어 있는데, 여기서 이미지 수정이 가능하다.

 

 

 

오늘은 여기에 뭐가 있는지 둘러보는 정도로 강의가 마무리 되었다

7강 끝!

리스트의 활용도는 아주 높다.

 

우선 새 프로젝트를 만들어주었다.

 

 

그 다음 간단한 레이아웃 설정 작업을 해주었다.

res>layout>activity_main.xml 에서 LinearLayout 으로 레이아웃 변경을 했다.

 

 

그 다음 리스트뷰 코드를 작성해주었다.

 

 

그랬더니 이렇게 리스트뷰가 쭈욱 설정되었다.

 

 

activity의 orientation을 vertical로 설정해주었더니 화면 정렬이 세로로 되었다.

 

 

리스트뷰 안에다가 아이디값을 부여했다.

 

 

메인액티비티로 와서 리스트뷰를 선언해주고 동작을 연결해주었다.

 

 

이제 리스트뷰가 아니라 리스트(문자열을 받는)를 만들어 주었다.

 

 

이제 만든 리스트와 리스트뷰를 연결해주는 중간다리 역할인 어댑터를 만들어주자. 

나는 ArrayAdapter라는 이름의 어댑터를 만들었다.

 

 

이제 리스트뷰에다가 어댑터를 세팅해준다.

 

 

이제 연결이 완료되었고, 아이템을 추가해주자.

 

 

데이터를 모두 입력해주고, 데이터가 날아가지 않도록 저장을 해주었다.

 

 

빌드를 해봤다.

ㅎㅎ빌드화면업데이트도 해봤다.

내가 원하는 대로 리스트뷰가 완성 되었다!!!!

 

6강 끝!

app>manifests>AndroidManifest.xml 이라는 것이 있다.

AndroidManifest는 manifests라는 패키지 안에 들어가 있다.

 

이 안에는 application 안에는 액티비티들과, 액티비티 안에는 Intent 가 있다.

 

application에서는 어플의 기본 세팅을 해줄 수 있다.

 

minmap을 커맨드 누르고 클릭하면 여러가지가 나온다.

지난 강의처럼 런쳐 아이콘 등을 설정해줄 수 있다.

 

icon 부분에 원하는 이미지를 넣으면, 원하는 이미지로 앱 아이콘이 설정이 된다.

roundIcon은 앱 아이콘 끝부분을 둥르스럼하게 처리해 주는 역할을 한다.

 

res는 리소스 폴더이다. res>drawable 은 주로 이미지 파일들을 모아놓는 곳이다.

layout은 말 그래도 레이아웃을 지정해주는 곳이다. 주로 액티비티와 연결하는 레이아웃 파일들을 담당한다.

minmap은 기본적인 아이콘들과 런쳐를 제공한다.

 

minmap의 이미지들 괄호 안에 써있는 것은 해상도를 의미한다. 

 

value 에서는 여러가지를 설정할 수 있다.

컬러는 말그대로 색상설정이 가능하다.

strings는 자주 쓰는 문장 등을 단축어로 저장하는 곳이다. 일종의 커스텀 단축키 느낌.

스타일은 앱 테마, 컨셉 등을 설정할 수 있다. 여러가지 디자인과 테마들을 모아놓은 곳이다.

 

5강 끝!

 

 

 

 

+ Recent posts