안드로이드 프로그래밍을 처음하다보니 이런저런 온갖 문제를 겪고 있습니다.
책이라도 한권 다 읽어보고 기초 부터 시작해야 하는데
성격이 급해서 그렇게는 못하고 책 몇 챕터 읽고 바로 실전 돌입해서
만들수 있는 수준에서 실전으로 이것저것 만들다 보니 이런저런 문제점들에 많이 시달리고 있네요.
각설하고, 오늘 만들어본 내용은 View를 상속받은 커스텀 뷰를 만들고(레이아웃 정의 파일이 없는 뷰 클래스)
그 커스텀 뷰 위에 AdMob 광고를 동적으로 추가해보고 싶었습니다.
레이아웃 XML이 정의되지 않은 뷰클래스에 레이아웃을 동적으로 잡는 방법은 모르겠어서
약간 잔머리를 굴려서 편법으로 해결을 했습니다.
빈 레이아웃 adslayout.xml을 하나 정의해 줍니다. (가로,세로 둘다 했음)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/res-auto" xmlns:andorid="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.google.android.gms.ads.AdView android:id="@+id/adView2" ads:adSize="BANNER" ads:adUnitId="@string/banner_ad_unit_id" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout >
웬지는 모르겠는데, ads:adSize 속성이 먹질 않아서 엄청 고생했습니다. 한참을 걸려서 해결하긴 했는데 뭘 어떻게 해서 해결이 된건지 솔직히 아직도 정확히는 모르고, 대충 xmlns:ads="http://schemas.android.com/apk/res-auto" 하고 관련이 있긴 한데 이것도 솔직히 여러번 했어도 에러나고 그래서 한참 애를 먹어서... 정확하지가 않네요.
어쨌든, 빈 레이아웃을 하나 선언해 주고,
메인 액티비티 onCreate() 함수 안에서 아래와 같이 뷰 인플래이트를 통해 레이아웃을 동적으로 생성해 주었습니다.
LinearLayout ll = (LinearLayout) View.inflate( this, R.layout.adslayout, null ); //xml 레이아웃을 객체화 시켜주는 방법 ll.addView(ecv, 1); //xml 없이 뷰를 상속받아서 만들 뷰클래스를 리니어레이아웃에 addView 함으로써 레이아웃 두개가 하나로 병함됨 setContentView(ll); // 합쳐진 레이아웃을 뷰로 설정
ecv는 뷰를 상속 받은 클래스 이고, 아래 포스트에 소스가 공개되어 있으니 참고하실분은 링크로 이동해서
소스코드를 살펴보세요.
일단 이 방법의 문제점은 레이아웃 순서를 바꾸니,
뷰클래스가 화면영역을 다 차지하면서 광고가 떠야하는 adView가 화면에 보이질 않았습니다.
그래서 보통 일반적인 광고 게재 위치인 하단이 아니라
상단에 광고가 자리잡게 됩니다.
아무리 하단으로 광고게재 위치를 바꿔보려고 해도 안되서 포기했습니다.
댓글