日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。