[Android Tutorial] Action Bar 스타일 적용

예전에 좌우 스와이프 가능한 탭 기반의 앱 만들기에서 살짝 다뤘던 것이 액션바였는데, 이번에 이 스타일의 앱을 만들면서 부딪혔던 문제들이 있어서 추가로 기록한다. 컬러, 스타일 등을 바꾸는 것이 꽤 복잡한데 Android Action Bar Style Generator를 활용하면 정말 쉽게 바꿀 수 있다. 하지만 한 가지 안 되는 것이 탭 메뉴의 텍스트였는데, 아래 구문을 추가하면 변경이 가능하다. Style Generator를 사용하면 styles_OOO.xml 파일이 생성되는데, 맨 위의 style 태그 사이에 아래 코드를, 12 <item name="android:actionBarTabTextStyle">@style/ActionBarTabTextStyle.Tabtheme</item><item name="actionBarTabTextStyle">@style/ActionBarTabTextStyle.Tabtheme</item> 그리고 텍스트 스타일을 지정하는 별도의 태그를 아래와 같이 설정하면 된다. 12345 <style name="ActionBarTabTextStyle.Tabtheme" parent="Widget.AppCompat.Light.ActionBar.TabText">    <item name="android:textSize">14sp</item>    <item name="android:textColor">@color/actionBarText</item>    <item name="textAllCaps">false</item></style> 그리고 기본적으로 탭에는 모든 문자가 대문자로 나오게끔 되어 있는데, textAllCaps를 false로 설정하면… Read the rest

코믹시스트 ver 1.1 업데이트

약 1년만에 업데이트를 한 것 같다. 코믹시스트 사이트를 리뉴얼한 것이 2주 전, 그리고 앱도 그에 맞춰서 업데이트를 했다. 사실, 변화의 폭이 그다지 크지 않지만 앱을 수정하는 것이 1년만이라 낯설어서 혼났다. 일단 새 회원을 유치하는 것이 가장 중요하다고 판단되어, Facebook 로그인 버튼을 웹과 앱에 추가했다. 앱에는 Facebook SDK가 일부 적용됐던 것이 있었는데 그 사이에 버전이 3.5.2에서 4.4.x로 크게 바뀌어서 생각보다 작업이 지체됐다. 그 외 서버 캐릭터셋이 변경되며 글자가 깨지던 문제를 전부 수정하였으나, 아직 웹툰쪽 정보는 제대로 틀을 잡지 못 해서 아직은 반쪽짜리 서비스에 그치고 있다. 고쳐야 할 것이 산더미다. 여하튼, 죽어있던 앱을 살리겠다는 의지로 작은 업데이트를 진행했다. 하지만 이 버튼을 달았다고… Read the rest

[Android Tutorial] 좌우 스와이프 가능한 탭 기반의 앱 만들기

앱을 만들 때 좌측 상단에 햄버거 아이콘을 넣고 좌측에서 나오는 슬라이딩 메뉴를 활용하는 방식을 선호하는 편이다. 그런데 더 심플한 형태가 필요할 때가 많을 것 같아 ViewPager와 Tab이 모두 적용된 형태를 만들어봤다. 예전에는 프로요와 진저브레드가 호환되지 않는다는 이유로 ActionBar를 안 쓰고 ActionBarSherlock 라이브러리를 썼었는데, 이젠 다 지원되나보다. 새 프로젝트를 그 동안 너무 안 해본 것이 티가 남 🙂 프로요와 진저브레드를 아직까지 지원할 필요가 있을까도 싶지만, 그래도 지원 안 하면 괜히 찜찜. 일단, 아래와 같이 설정하면 Action Bar Tabs (with ViewPager) 앱이 만들어진다. 가장 눈에 거슬리는 것이 상단의 타이틀 바인데, onCreate 에 아래 두 줄을 삽입하고, onCreateOptionsMenu와 onOptionsItemSelected 모두 제거하면 된다. 12… Read the rest

[Android Tutorial] 웹툰 뷰어 제작 – 4) SharedPreference 활용

지난 포스팅에서 웹툰을 보여주는 기능까지는 넣었는데, 다른 웹툰을 볼 수 있는 기능과 로딩중 표시는 다루지 않았다. 다음에 다룬다고 하고 무려 석달이나 지나 이제야 다루게 됐다. 이제는 정말로 끝! 내용은 많지 않은데 너무 길게 늘인 것 같은 자기반성과 함께 🙂 목차 1. 연재 정보 받아오기 – XML Parsing 2. 원하는 형태의 리스트로 만들기 – ListView 3. 웹툰 본편 보여주기 – WebView 4. 다른 웹툰 보기 & 로딩 표시 + 소스 공개 – SharedPreference Fragment 간의 데이터를 전달하기 위해서 전역 변수를 선언해서 쓰는 방법도 있겠지만, 개인적인 편의상 SharedPreference를 썼다. 보통 설정값을 저장해서 다음에 앱을 실행될 때까지 저장해놓는 용도로 사용한다. MenuFragment.java 1234567891011121314151617181920212223242526272829 private… Read the rest

[Android Tutorial] 웹툰 뷰어 제작 – 3) Webview 호출

지난 포스팅에서 웹툰 목록을 CustomListView에 출력하는 부분까지 다루었다. 이제 클릭했을 때, 해당 만화를 보여주면 끝! 기존과 마찬가지로 최소한의 기능만 담았다. 목차 1. 연재 정보 받아오기 – XML Parsing 2. 원하는 형태의 리스트로 만들기 – ListView 3. 웹툰 본편 보여주기 – WebView 클릭했을 때 새로운 Activity를 호출하여야 하고, 새로 띄운 Activity의 Webview에서 만화를 보여줘야 한다. 일단, ListFragment에서 클릭시 처리 방법이다. ListFragment.java 1234567891011         listView.setOnItemClickListener(new ListView.OnItemClickListener() {            public void onItemClick(AdapterView<?> a, View vi, int pos, long id) {                Item item = arrayOfList.get(pos);                String url = item.getLink().replace("http://webtoon.daum.net/", "http://m.webtoon.daum.net/m/");                 Intent intent = new Intent(getActivity(), WebviewActivity.class);                intent.putExtra("weburl", url);                intent.putExtra("title", item.getTitle());                startActivity(intent);            }        }); 중간에 URL의 일부를 변경하는 부분이 있는데, RSS에서 받아오는 정보는 PC 기준의 URL이라… Read the rest

[Android Tutorial] 웹툰 뷰어 제작 – 2) ListView 출력

지난 포스팅에서 웹툰 연재 정보 RSS 데이터를 받아 배열에 담는 것까지 다루었다. 그 데이터를 알맞게 배열하여 ListView에 출력하면, 사실상 끝. CustomListView는 지겨울 정도로 활용이 되는 부분이므로, 꼭 익혀야 하는 부분이다. 무한 스크롤 같은 기능을 라이브러리를 활용하여 구현하는 것도 좋은데, 여기서는 기본형으로만 다루었다. 목차 1. 연재 정보 받아오기 – XML Parsing 2. 원하는 형태의 리스트로 만들기 – ListView 3. 웹툰 본편 보여주기 – WebView 일단, 리스트에서 어떤 내용을 담을지 결정한다. 여기서는 이미지와 제목, 업로드 시간을 표시하기로 한다. 아래 형태를 xml 로 만든다. row_list.xml 123456789101112131415161718192021222324252627282930313233343536373839 <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#e6e6e0" >     <RelativeLayout        android:id="@+id/layout_border"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_margin="10dip"        android:background="#FFFFFF"        android:padding="8dip" >         <ImageView            android:id="@+id/ivThumbnail"            android:layout_width="wrap_content"            android:layout_height="wrap_content" />         <TextView            android:id="@+id/txtTitle"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginLeft="8dip"            android:layout_toRightOf="@+id/ivThumbnail"            android:ellipsize="end"            android:maxLines="1"            android:textSize="16sp" />         <TextView            android:id="@+id/txtPubdate"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignLeft="@+id/txtTitle"            android:layout_below="@+id/txtTitle"            android:textColor="#757575"            android:textSize="12sp" />    </RelativeLayout></RelativeLayout> 그리고 이 형태에 맞춰 데이터를 넣어야 하는데, 그… Read the rest

[Android Tutorial] 웹툰 뷰어 제작 – 1) 연재 정보 수집

아무래도 내가 관심이 있는 분야가 웹상의 정보들을 앱으로 편하게 볼 수 있게 하는 것이라서, XML Parsing 해서 ListView 에 얹히는 작업이 반복되고 있다. 일종의 틀로 만들어놓고 재사용을 해도 좋을 것 같아 최대한 간단한 포맷으로 정리하였다. 따라 만들어보는 Tutorial 식으로 작성하고자, Daum 웹툰 뷰어를 만들어보았다. 연재 목록을 RSS로 제공하고 있어서 작업하기에 편리하다 🙂 이 작업은 무려 5개월 전에 작성한 Tutorial ‘슬라이딩 메뉴 만들기’ 를 기반으로 하고 있다. Activity, Fragment 의 차이라서 onCreate와 onCreateView 정도의 차이만 있을 뿐이니 크게 상관은 없다. 아래 이미지와 같이 윤태호의 신작 『파인』 의 정보를 불러오는 Tutorial 을 만들 예정이다. 목차 1. 연재 정보 받아오기 – XML Parsing… Read the rest

[Android Tutorial] 슬라이딩 메뉴 만들기

화면 좌측에 슬라이딩 메뉴가 나오는 UI가 대세다. 가장 초기에 사용되었던 Tab의 공간적 한계를 극복한 형태인데, 그렇다 보니 기본 컨트롤로 지원되지는 않는다. 사용성면에서나 디자인면에서나 Tab보다 마음에 들어, 어떤 앱을 만들어도 거의 이 구조를 사용하게 된다. 그래서 항상 세팅하던 그 부분에 대해서 정리하였다. 아직도 안드로이드 2.x (프로요, 진저브레드)를 사용하는 유저가 20%가 넘는데, 이 방법은 2.x 유저까지도 지원 가능한 방법이다. 기본 컨트롤이 아니다보니 2가지 라이브러리가 필요하다. ActionBarSherlock : https://github.com/JakeWharton/ActionBarSherlock SlidingMenu : https://github.com/jfeinstein10/SlidingMenu 결과물 설정 기본 설정으로 Android Application 을 만든다. 앞서 설명한 라이브러리 2개를 Import 한다. SlidingMenu 의 경우, 하위 폴더 중 library 폴더를 선택하여 slide_library 를 불러야 한다. 메인 프로젝트의 Properties Android… Read the rest

잊으면 망하는 keystore 파일 백업하기

iOS 앱개발을 먼저 공부했고, 국내에서는 안드로이드 공부가 필수 같아서 안드로이드 공부를 시작했다. 개발 도구 : Xcode vs. Eclipse 비교 불가능한 시뮬레이터 이런 이유 때문에 도저히 공부할 맛이 안 났는데, 어느 정도 재미를 붙인 다음에 다시 그 기세를 꺾는 것이 있었다. 바로, keystore 파일의 증발! keystore 파일은 맨 처음에 마켓에 올릴 때 Signed Application Package를 만들 때 생성되는데, 이후 업데이트를 할 때마다 이 파일이 필요하다. 그런데 정말로 어처구니없게도 아무 이유없이 증발하는 경우가 있고, 아무리 복구를 해보려 해도 흔적조차 남아있지 않다. 구글링 끝에 내린 결론은, 포기하고 내린 다음에 다시 올리는 것. 업데이트는 불가능하다. 그래도 1000 안팎의 유저를 갖고 있을 때 날렸기에 망정이지,… Read the rest