한 삼일은 삽질한 것 같다.
이 소스 저 소스 보느라 온 머리가 뒤죽 박죽.
정리는 안되고 머리카락은 빠지고..ㅠㅁㅠ
프로그래머와 탈모의 상관관계에 대해 문득 심각한 고찰이 필요하다고 느끼는 찰나
왠지 모르게 술술 풀려버렸다.
이번 탭 위젯은 소스를 참고 하더라도 정리를 한 후 접근해야한다-라는 것인데
개발 경력이 거시기 하다보니
무작정 샘플 소스 다운 받고 적용 시키고
코드는 스파게티가 되고 빌드하니 생판 처음 보는 익셉션에 에러들...
흰 것은 종이요 빨간 것은 글씨로다..
이번 프로젝트로 인해 뭔가 깨달음을 얻은 것 같은 기분이다.
기초적 지식 부족으로 인해 라이프 사이클이니 인텐트,서비스,프로바이더 등등에 대해 더 공부를 해야겠지만 늦게 시작한 공부라 책 한번 볼 거 열번 봐도 도무지 이해가 안간다는거.
SI 1년이면 JAVA신과 접신한다던데 접신이고 나발이고 접시닦는 일이나 해야 하나-라는 생각이 들기를 여러번이다.
각설하고
Android 위젯 중에 TabHost를 이용한 탭메뉴 구현 및 꾸미는게 목적이다.
걍 구현하면 기본적으로 텝메뉴 아래에 파란(혹은 회색)줄이 가고,
클릭할때 마다 탭메뉴에 파란(혹은 회색) 테두리가 둘러쌓이기 때문에 디자인을 적용시키려면 수술이 필요하다.
아무것도 몰랐을 땐 걍 background 속성에 이미지 경로를 넣어주면 되겠지~하고 태연하게 생각했다. 하지만 파란줄 땜에 캐삽질 했다.
일단
1.뷰에 인플레이트 시킬 xml파일을 만든다.
이클립스(이클립스 만세!)가 좋아져서 android XML 파일을 만들 때 무슨 레이아웃으로 만들지 정할 수 있다.
TabHost로 선택하자.
이클립스 버전이 낮아 선택이 안되면 걍 쌩으로 치면 된다.
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
이런 식으로..ㅋㅋ
2.TabHost 자식노드에 내용을 나타낼 FrameLayout과 TabWidget을 선언한다.
3.그리고 제일 중요한 TabWidget에 background값을 준다.
근데 이 background 이미지를 한개씩 자르지 말고 통으로 자른다.
뭔말인지 나중에 이미지 첨부 하겠다.
(이걸 안해줘서 열라 삽질했다.)
2012년 6월 21일 목요일
2012년 6월 20일 수요일
ActivityGroup으로 Activity를 묶었을 경우 Dialog에러에 대해
06-20 20:28:03.471: E/AndroidRuntime(14985): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@405146c0 is not valid; is your activity running?
한 세시간을 삽질했다.
Dialog를 띄우는 데 저 에러가 발생했다.
아무리 찾아보고 삽질하고 코드를 바꿔봐도 해결되지 않았는데
에러 로그 중 WindowManager에서 에러를 띄우길래 의심은 했었지만 그게 원인일 줄이야.orz
지금 개발중인 앱은 TabActivity로 메뉴를 구현해 놓았는데 같은 레벨 선상 Activity가 존재하는 구조로 인해 Tab하나에 여러개의 Activity를 연결해야하는 상황이어서 ActivityGroup을 상속받는 부모 Class에서 자식 클래스를 관리하고 있는 상황.
때문에 해당 Dialog를 띄우는 Activity의 주체는 본인이 아니라 실질적 뷰를 관리하고 있는 부모 Activity라는 것이었던 것이다!!!!(아 놀라워라...자식은 무용지물이야..)
때문에
new AlertDialog.Builder()를 할때 getParent()함수를 호출해서 부모를 불러줘야 에러가 발생하지 않는다.
this 호출했다가 계속 삽질했음.
피드 구독하기:
글 (Atom)