博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Android迷你广告上添加浮动的关闭按钮
阅读量:5230 次
发布时间:2019-06-14

本文共 3723 字,大约阅读时间需要 12 分钟。

在开发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即可。

下面是效果图:

转载于:https://www.cnblogs.com/sparkleDai/p/7605010.html

你可能感兴趣的文章
解决 sublime text3 运行python文件无法input的问题
查看>>
javascript面相对象编程,封装与继承
查看>>
Atlas命名空间Sys.Data下控件介绍——DataColumn,DataRow和DataTable
查看>>
Java中正则表达式的使用
查看>>
算法之搜索篇
查看>>
新的开始
查看>>
java Facade模式
查看>>
NYOJ 120校园网络(有向图的强连通分量)(Kosaraju算法)
查看>>
SpringAop与AspectJ
查看>>
Leetcode 226: Invert Binary Tree
查看>>
http站点转https站点教程
查看>>
解决miner.start() 返回null
查看>>
bzoj 2007: [Noi2010]海拔【最小割+dijskstra】
查看>>
BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
查看>>
定制jackson的自定义序列化(null值的处理)
查看>>
auth模块
查看>>
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>