日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android开发之在任意Activity在广点通页面添加自定义布局在穿山甲页面添加任意布局

發(fā)布時間:2023/12/15 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android开发之在任意Activity在广点通页面添加自定义布局在穿山甲页面添加任意布局 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

老套路看下效果圖:

上面是穿山甲的廣告頁面,需求是添加自定義布局到別人SDK的頁面,SDK內(nèi)部不支持這樣方式。怎么辦呢?

思路:實際上我們可以換位思考下,如果能拿到這個廣告頁的activity頁面,在這個拿到的activity頁面添加自定義布局不就好了。

看下如何獲取當前activty:下面這個方法要在application中初始化

/*** 監(jiān)聽Activity變化*/private void initActivityLifecycleCallbacks() {registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {@Overridepublic void onActivityCreated(Activity activity, Bundle savedInstanceState) {//每次都添加activity到棧中ActivityManager.getInstance().addActivity(activity);Log.i("wsc", String.format("ActivityLifecycleCallbacks ---- onActivityCreated %s", activity.getLocalClassName()));}@Overridepublic void onActivityStarted(Activity activity) {if (activityCount == 0) {ActivityManager.getInstance().setAppInBackGround(false);Log.i("wsc", String.format("ActivityLifecycleCallbacks ---- onActivityStarted 回到前臺 %s ", activity.getLocalClassName()));AppRecordUtils.getInstance().startRecord();}activityCount++;Log.i("wsc", String.format("ActivityLifecycleCallbacks ---- onActivityStarted %s ", activity.getLocalClassName()));}@Overridepublic void onActivityResumed(Activity activity) {Log.i("wsc", String.format("ActivityLifecycleCallbacks ---- onActivityResumed %s ", activity.getLocalClassName()));}@Overridepublic void onActivityPaused(Activity activity) {Log.i("wsc", String.format("ActivityLifecycleCallbacks ---- onActivityPaused %s ", activity.getLocalClassName()));}@Overridepublic void onActivityStopped(Activity activity) {activityCount--;if (activityCount == 0) {ActivityManager.getInstance().setAppInBackGround(true);Log.i("wsc", String.format("ActivityLifecycleCallbacks ---- onActivityStopped app 在后臺運行%s ", activity.getLocalClassName()));AppRecordUtils.getInstance().stopRecord();}Log.i("wsc", String.format("ActivityLifecycleCallbacks ---- onActivityStopped %s ", activity.getLocalClassName()));}@Overridepublic void onActivitySaveInstanceState(Activity activity, Bundle outState) {}@Overridepublic void onActivityDestroyed(Activity activity) {ActivityManager.getInstance().removeActivity(activity);Log.i("wsc", String.format("ActivityLifecycleCallbacks ---- onActivityDestroyed %s ", activity.getLocalClassName()));}});}

看下自己寫ActivityManager

package cn.xiayiye5.com.manager;import android.app.Activity; import android.util.Log;import java.util.Stack;/*** @author 劉暢* @createdate 2019-06-18* @describe*/ public class ActivityManager {private Stack<Activity> mStack;private boolean appInBackGround;public boolean isAppInBackGround() {return appInBackGround;}public void setAppInBackGround(boolean appInBackGround) {this.appInBackGround = appInBackGround;}private ActivityManager() {if(mStack == null){mStack = new Stack<>();}}private static final class SingletonHolder {private static final ActivityManager INSTANCE = new ActivityManager();}public static final ActivityManager getInstance() {return SingletonHolder.INSTANCE;}public void addActivity(Activity activity){if(activity != null){mStack.add(activity);}Log.i("wsc",String.format("ActivityManager addActivity = %s %s ",activity.getLocalClassName(),mStack.size()));}public void removeActivity(Activity activity){if(activity != null){mStack.remove(activity);}Log.i("wsc",String.format("ActivityManager removeActivity = %s %s ",activity.getLocalClassName(),mStack.size()));}public void finishActivity(Activity activity){if(activity != null){removeActivity(activity);if(!activity.isFinishing()){activity.finish();}}}/*** 該方法慎用 容易引起內(nèi)存泄漏* @return*/public Activity getCurrentActivity(){Activity activity = null;if (!mStack.empty()){activity = mStack.lastElement();}return activity;}public int getStackSize(){return mStack.size();}public Activity getStackActivity(int index){if (index < 0){return null;}if(mStack.size() > index){return mStack.get(index);}return null;}public Activity getStackActivityDesc(int index){if(mStack.size() > index){return mStack.get(mStack.size() - 1 - index);}return null;}/*** 彈出除cls外的所有activity** @param cls*/public void finishAllActivityWithOut(Class<? extends Activity> cls) {while (true) {Activity activity = getCurrentActivity();if (activity == null) {break;}if (activity.getClass().equals(cls)) {break;}removeActivity(activity);}}/*** 關(guān)閉activity* @param count 關(guān)閉的數(shù)量*/public void finishActivityCount(int count){for (int i = 0; i < count; i++) {Activity activity = getCurrentActivity();finishActivity(activity);}}/*** 關(guān)閉指定Activity* @param clazz Activity類*/public void finishActivity(Class<? extends Activity> clazz){for (int i = 0; i < mStack.size(); i++) {if(mStack.get(i).getClass().equals(clazz)){finishActivity(mStack.get(i));break;}}}/*** 堆棧里是否有這個頁面* @param clazz* @return*/public boolean hasActivity(Class<? extends Activity> clazz){for (int i = 0; i < mStack.size(); i++) {if(mStack.get(i).getClass().equals(clazz)){return true;}}return false;}/*** 關(guān)閉這個Activity之前的頁面* @param cls Activity類*/public void finishActivityWithOut(Class<? extends Activity> cls){while (!mStack.empty()) {Activity activity = getCurrentActivity();if (activity.getClass().equals(cls)) {break;} else {finishActivity(activity);}}}/*** 結(jié)束除cls之外的所有activity,執(zhí)行結(jié)果都會清空Stack** @param cls*/public void finishAllActivityExceptOne(Class<? extends Activity> cls) {while (!mStack.empty()) {Activity activity = getCurrentActivity();if (activity.getClass().equals(cls)) {removeActivity(activity);} else {finishActivity(activity);}}}/*** 結(jié)束所有activity*/public void finishAllActivity() {while (!mStack.empty()) {Activity activity = getCurrentActivity();finishActivity(activity);}} }

將自定義布局添加到activity的方法:

new Handler().postDelayed(new Runnable() {@Overridepublic void run() {Log.i("kk", ActivityManager.getInstance().getCurrentActivity().getComponentName().getClassName() + "pppp");addViewToContent(ActivityManager.getInstance().getCurrentActivity());}}, 300); public void addViewToContent(final Activity activity) {if (activity == null) {return;}activity.getWindow().getDecorView().post(new Runnable() {@Overridepublic void run() {FrameLayout frameLayout = (FrameLayout) activity.findViewById(Window.ID_ANDROID_CONTENT);View addView = View.inflate(activity, R.layout.ad_page_add_view, null);FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT,Gravity.RIGHT);layoutParams.topMargin = CommonUtil.dip2px(activity,80);addView.setLayoutParams(layoutParams);frameLayout.addView(addView);}});}

看下xml布局:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/tvStoneGive"android:layout_width="110dp"android:layout_height="@dimen/dp_45"android:background="@drawable/shape_stone_bg"android:orientation="vertical"><ProgressBarandroid:id="@+id/pbPlayProgress"style="@style/Widget.AppCompat.ProgressBar.Horizontal"android:layout_width="@dimen/dp_67"android:layout_height="3dp"android:layout_marginLeft="@dimen/dp_15"android:layout_marginTop="@dimen/dp_14"android:layout_marginRight="@dimen/dp_2"android:max="100"android:progress="30"android:progressDrawable="@drawable/get_gift_progress" /><TextViewandroid:id="@+id/tvShowProgress"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="@dimen/dp_9"android:layout_marginRight="@dimen/dp_4"android:layout_toRightOf="@id/pbPlayProgress"android:text="3/10"android:textColor="@color/color_black_333333"android:textSize="9sp" /><TextViewandroid:id="@+id/tvShowGift"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/pbPlayProgress"android:layout_marginLeft="@dimen/dp_17"android:layout_marginTop="@dimen/dp_6"android:layout_marginBottom="@dimen/dp_5"android:drawableLeft="@mipmap/icon_stone_game_detail"android:drawablePadding="5dp"android:text="+5原力/1天"android:textColor="@color/color_black_333333"android:textSize="10sp" /> </RelativeLayout>

參考布局說明:博主直達

如果需要源碼請自行下載即可:

穿山甲SDK頁面添加自定義布局的源碼:點擊下載源碼

總結(jié)

以上是生活随笔為你收集整理的Android开发之在任意Activity在广点通页面添加自定义布局在穿山甲页面添加任意布局的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91看片看淫黄大片 | 久久亚洲av无码精品色午夜麻豆 | 国产成人精品国内自产拍免费看 | 欧美影视 | 色姐| 美女扒开尿口让男人桶 | 猛1被调教成公厕尿便失禁网站 | 日本久久久久久久久久久 | 51调教丨国产调教视频 | 超碰91在线观看 | 午夜片在线观看 | 亚洲av乱码久久精品蜜桃 | 免费成人av在线播放 | 日本a大片 | 欧美三区四区 | 日韩三区视频 | youjizz视频| 天天操天天操天天操天天操天天操 | 影音先锋国产精品 | 懂色av一区二区在线播放 | 狠狠97| 精品一区在线播放 | 人妻丰满熟妇av无码久久洗澡 | 亚洲欧美日韩专区 | 久久视频免费在线观看 | 欧美乱三级 | 日韩高清二区 | 欧美黑人一级 | 在线观看国产成人 | 在线观看9.1 | 岛国av免费| 俺啪也| 九色首页| 日韩在线视频网址 | 微拍福利一区二区 | 免费成人av片 | 青青青手机视频 | 99精品欧美 | 成人综合一区二区 | 日本黄色大片视频 | 欧美日韩黄色一区二区 | 91爱视频| 亚洲男女 | 亚洲爱爱网站 | 日韩丝袜一区 | 成人小说亚洲一区二区三区 | 麻豆视频免费网站 | av色欲无码人妻中文字幕 | 尤物视频在线观看视频 | 欧美另类人妖 | 欧美一区二区在线视频观看 | www.天天色| 91精品国产乱码久久久 | 特级毛片av | 99在线精品视频免费观看20 | 欧美一区二区不卡视频 | 美女又爽又黄又免费 | 精品视频久久久久久久 | 亚洲一区二区黄片 | 国产精品99久久久久久久久 | 亚洲AV无码一区二区三区性 | 日本精品一区二区三区四区的功能 | 国产网站在线免费观看 | 午夜精品一二三区 | 中文字幕一区二区三区精华液 | 天天狠狠干 | 少妇无码一区二区三区免费 | 中文免费av | 国产精品扒开腿做爽爽 | 禁止18在线观看 | 999国产在线 | 亚洲乱码中文字幕 | 超碰在线人人干 | 欧美成人国产精品高潮 | 国产精品一国产精品 | 超碰免费在线观看 | 男女视频在线免费观看 | 国产精品网页 | 在线播放91灌醉迷j高跟美女 | 日韩婷婷 | 免费婷婷 | 上原亚衣在线 | 蜜芽在线视频 | 91色啪| 欧洲一区二区三区在线 | 日韩欧美在线一区二区三区 | 九九影院最新理论片 | 成人黄色小说在线观看 | 日韩香蕉网 | 日本中文字幕第一页 | 精品一区精品二区 | 国产九色在线播放九色 | 在线免费观看黄视频 | 日韩午夜在线观看 | 91禁在线观看| 免费黄色一级片 | 国产精品视频在 | 成人高清在线观看 | va欧美|