在開發Android應用時,有時為了收益會增加一些廣告。但是廣告不斷的滾動顯示,又很煩人,降低用戶體驗,所以就需要增加一個關閉的按鈕來隱藏或者關閉廣告。有的應用是直接將關閉廣告的功能做到了設置界面裡邊,但有的是在廣告上增加了一個按鈕。這裡以迷你廣告為例。
萬普的迷你廣告是一個LinearLayout,我開始嘗試著在上面直接添加一個關閉按鈕,然後設置相應的布局參數,但是效果不理想。後來改用RelativeLayout作為父容器,將迷你廣告的LinearLayout和關閉按鈕一同放進去。下面是實現的代碼。
Waps.java
package com.sparkle.ad;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Color;
import android.opengl.Visibility;
import android.text.Layout;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;
import cn.waps.AppConnect;
import com.sparkle.qrcode.R;
public class Waps {
private static String _appId = "";
private static String _advertismentPlatform = "default";
private static AppConnect _appConnect = null;
private static void GetChannelInfo(Activity activity) {
ApplicationInfo appInfo = null;
try {
appInfo = activity.getPackageManager().getApplicationInfo(
activity.getPackageName(), PackageManager.GET_META_DATA);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
_appId = appInfo.metaData.getString("APP_ID");
_advertismentPlatform = appInfo.metaData.getString("APP_PID");
}
public static void Start(Activity activity) {
GetChannelInfo(activity);
_appConnect = AppConnect.getInstance(_appId, _advertismentPlatform,
activity);
if (_appConnect == null) {
return;
}
_appConnect.setAdBackColor(Color.argb(50, 120, 240, 120));
_appConnect.setAdForeColor(Color.YELLOW);
LinearLayout miniLayout = GenerateMiniLinearLayout(activity);
_appConnect.showMiniAd(activity, miniLayout, 10);
}
private static LinearLayout GenerateMiniLinearLayout(Activity activity) {
final RelativeLayout relativeLayout = new RelativeLayout(activity);
LinearLayout miniLayout = new LinearLayout(activity);
ImageView close_imageView = new ImageView(activity);
close_imageView.setBackgroundResource(R.drawable.close);
close_imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
relativeLayout.setVisibility(View.GONE);
}
});
RelativeLayout.LayoutParams closeParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
closeParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
close_imageView.setLayoutParams(closeParams);
relativeLayout.addView(miniLayout);
relativeLayout.addView(close_imageView);
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
layoutParams.gravity=Gravity.BOTTOM;
activity.addContentView(relativeLayout, layoutParams);
return miniLayout;
}
public static void Close(Context context) {
AppConnect.getInstance(context).close();
}
}
注:
(1)、APP_ID和APP_PID在AndroidManifest.xml中配置。
(2)、Start函數用來啟動廣告。
(3)、Close函數用來關閉廣告。
(4)、GenerateMiniLinearLayout函數中生成了RelativeLayout的相對布局。在RelativeLayout中,添入迷你廣告miniLayout和關閉按鈕close_imageView。close_imageView設置背景圖和點擊事件。點擊事件中,只是將廣告隱藏了,如果有需要可以直接關閉。
要點:
(1)、為了能將close_imageView設置到右側,需要使用RelativeLayout.LayoutParams(不是LinearLayout.LayoutParams,我開始用的是這個,然後用gravity,怎麼都達不到效果),再使用addRuler來設置ALIGN_PARENT_RIGHT。
(2)、在addContentView中,需要布局RelativeLayout。使用FrameLayout.LayoutParams來布局(注意一定要用這個,RelativeLayout.LayoutParams和LinearLayout.LayoutParams都用過,達不到效果),設置gravity即可。
下面是效果圖:
Android 4.4.4 發布下載 http://www.linuxidc.com/Linux/2014-06/103467.htm
最簡單的Ubuntu Touch & Android 雙系統安裝方式 http://www.linuxidc.com/Linux/2014-01/94881.htm
在Nexus上實現Ubuntu和Android 4.4.2 雙啟動 http://www.linuxidc.com/Linux/2014-05/101849.htm
Ubuntu 14.04 配置 Android SDK 開發環境 http://www.linuxidc.com/Linux/2014-05/101039.htm
64位Ubuntu 11.10下Android開發環境的搭建(JDK+Eclipse+ADT+Android SDK詳細) http://www.linuxidc.com/Linux/2013-06/85303.htm
Ubuntu 14.04 x64配置Android 4.4 kitkat編譯環境的方法 http://www.linuxidc.com/Linux/2014-04/101148.htm
Ubuntu 12.10 x64 安裝 Android SDK http://www.linuxidc.com/Linux/2013-03/82005.htm
更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11