그저 조건, 배열 반복 같은 기초적인 프로그래밍만 익히고 실전 안드로이드에 뛰어드는 왕초보 개발자입니다..-_-
최근래 정말 염치없이 많은 질문글을 올렸는데 현재 저의 생각은 이렇습니다..
일단 첨부해드린 이미지 파일을 한번 구경해주셔요..ㅎㅎ
이미지를 보시다시피 현재 제가 구상한 앱은 탭으로 이루어진 인터페이스입니다만..
현재 종합적으로 정리해볼때 몇가지의 고충이 있습니다..
1. Tab을 클릭할때 아래에 내용을 띄우는 과정에서 각각(Now, Books, Share, Setting)의 xml을 다들 독립적으로 만들어 탭을 누르면 해당 탭의 xml을 불러오는 식으로 할지 안할지 그것이 첫번째 이구요.
2. 해당 디자인처럼 저는 Tab을 기본 탭이아닌 디자이너가 디자인한 png를 뒤집어 씌우려고하는데 그게 말처럼 쉽지는 않더군요..
디자인된 PNG를 background에 적용하고 Tab을 투명하거나 안보이게 함으로써(기능은 그대로 유지) 해당 TAB의 디자인을 하려고하는데..
굳이 이런방법이 아니고 다른 방법은 없을지...-_-;; 이것이 두번째...
3. Books에서 ListView를 이용해 책의 리스트를 쭉 나타내고 그것들을 상단의 몇가지 버튼을 이용해 그 책의 리스트를 분류하는 기능과
새로운 책에대한 리스트를 추가하는 법을 구현해야하는데.. 아직 이쪽은 검색해보거나 그런 노력이 없어서 해결이 안된지도...
아무튼 현재 개발을 시작으로 main.xml에 4개의 탭을 구현하고 각각의 xml파일만 생성해놓은 상황인데 어떻게 접근해 나갈지가 막막..합니당
초짜 개발자가 모르면 아예 시작도 하지 말라는 생각들도 하실수 있겠지만... 저는 어떤 일을 시작함으로써 저의 경험과, 실력도 신장된다고 생각하는 순수한 생각을 가지고 있습니다..^^;
제가 어떻게 시작해야할지 알려주세요..ㅠㅠ!
Inflator 이용해서 View를 생성한다음 setIndicator의 인수로 넘겨주면 됩니다.
탭공부중인데요. setIndicator("tab1",getResources().getDrawble(R.어쩌고저쩌고)) 이걸로 넘겨주신단 말씀이신가용? 인디케이터로 넘길때
그림 자체가 넘어가는게 아니라 탭 안에 이미지뷰로 단지 그냥 들어가져 버려서요.
탭끼리 인텐트하기도 쉽지 않으니까 차라리 레이아웃안에 이미지 뷰어로 저 탭 디자인을 넣어버리구요. 네개의 버튼을 생성 한다음에요
저 디자이너께서 만드신 이미지 위에 겹쳐버리고 버튼을 투명 버튼으로 구성해버리면 어떨까요. 그럼 손으로 탭을 터치한다하면 버튼이 클릭
되는 효과가 나오고 각 버튼마다 밑의 뷰를 초기화하고 다시 쓰는 형태로. 저도 탭 공부하면서 기존의 탭모양이 맘에 들지 않아 커스톰제작하려던
중 초짜라 너무 힘들어서 이방법을 생각해봤는데 가능할까요.
탭을 커스터마이징 할때 일단 다른것 보다 탭의 구성을 먼저 이해하셔야 합니다.
전체가 TabHost로 둘러싸여 있고 내용은 FrameLayout에 들어가고 탭 indicator는 TabWidget에 추가 됩니다.
우리가 탭을 추가할때 크게 두가지를 주는데 하나는 탭 indicator이고 하나는 '내용' 입니다.
탭 indicator에는 String, Image(리소스), View를 줄 수 있습니다.
String을 주면 글씨가 들어가고 Image를 주면 그림이 나오게 되죠. 배경은 기본 탭일거구요.
그러나 보통 개발 하면 탭 indicator View를 커스터마이징 해야 하는 경우가 많이 나옵니다. 여기서 질문하시는 분들도 다 그렇구요.
이때 View를 넘겨주면 된다는겁니다.
미리 내가 원하는 indicator의 layout을 구성해두고요. (indicator_layout.xml)
inflater를 이용해서 View를 생성한후 그것을 setIndicator(view) 형식으로 주면 됩니다.
여기서 한가지 팁은... 탭을 보면 탭 indicator 밑에 흰 줄이 있는데요. (갤럭시 S에서는 하늘색)
이것을 없애고 싶으면 적어도 하나 이상의 indicator가 View로 주어져야 합니다.
이상 indicator 커스터 마이징이었구요.
내용(Content)은 View랑 Intent.... 그리고 하나 더 줄수 있는데 까먹었습니다. ㅡㅡㅋ
어쨋든 두개를 많이 쓸거고 압도적으로 Intent를 많이 쓰겠죠.
탭 내부에서 Intent 처리하는 방식에 의해서 ActivityGroup을 상속받아야만 Intent를 이용한 탭을 쓸수 있습니다.
시켜두고 inflater를 이용해 ex) LinearLayout linear = (LinearLayout)View.inflate(this, R.layout.indicator_layout, null);
을 시켜서 linear객체를 indicator(linear)시키면 된다는 건가요? 워낙 모르는게 많아서 답답하실텐데 죄송합니다.
1. layout에 Indicator_view.xml을 하나 만들기!
내용은 당연히 리니어로 해놓고 안에다가는 버티컬 가로세로 워랩워랩으로 주고 아이디 주기 제일 중요한 메뉴 스타일 그림
android:Background="@drawble/icon" 넣어주기
2. .java로 가서 코딩!
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.tab_menu,(ViewGroup)findViewById(R.layout.tab_menu));
요러케 ~~~ 레이아웃인플래이터객체인 inflater(전개하다라는뜻) 생성
그리고 View객체인 layout을 하나 생성하고 인플래이터객체인 inflater로 inflater.inflate(resource,root) 지정해주기
3. 제일 마지막 . mTabHost.addTab(mTabHost.newTabSpec("Tab1").setIndicator(layout).setContent(R.id.textview1));
요런식으로 해주시면 됩니다.
예를들어 탭사이에 Data를 주고 받는다고 생각해보죠. 탭으로 구성하면 인텐트로 주기도 힘들고
(방법은 있습니다. 전 그렇게 짜긴했는데 구성 빡셉니다.)
당연히 단순 Method call로 풀수도 없겠죠. 이럴때 하나로 묶어서 레이아웃의 Visibility만 관리하면 데이터 주고받기가 편할수 있습니다.
2. 저건 Tab에서 방법이 있는데 View를 인디케이터로 넘겨 주면됩니다. 인디케이터의 Layout을 XML로 만들어두고,
Inflator 이용해서 View를 생성한다음 setIndicator의 인수로 넘겨주면 됩니다.
3. 만약 책 내용이 DB에 저장된거라면, SimpleCursorAdapter 쓰시면 편합니다. 분류 버튼 누를때마다 쿼리를 불러서
Cursor를 받고 그것을 Adapter에 주면 됩니다. 그렇지 않다면 ArrayAdapter 였나... List를 이용하는 Adapter가 있습니다.
'책'을 객체로 잘 구성하셨다면 getView만 구현 잘하시면 되구요.
책의 추가 삭제하는 경우, ArrayAdapter 라면 ArrayList에서 내용을 삭제하시고 내용을 새로 반영하는 함수가 있는데
함수 이름을 까먹었네요 (notify.....인데)
SimpleCursorAdapter라면 Delete 쿼리로 필드를 삭제하고 내용을 새로 반영하는 함수 호출하면 됩니다.