Android开发之在任意Activity在广点通页面添加自定义布局在穿山甲页面添加任意布局
生活随笔
收集整理的這篇文章主要介紹了
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);}}/*** 關閉activity* @param count 關閉的數(shù)量*/public void finishActivityCount(int count){for (int i = 0; i < count; i++) {Activity activity = getCurrentActivity();finishActivity(activity);}}/*** 關閉指定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;}/*** 關閉這個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);}}}/*** 結束除cls之外的所有activity,執(zhí)行結果都會清空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);}}}/*** 結束所有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頁面添加自定義布局的源碼:點擊下載源碼
總結
以上是生活随笔為你收集整理的Android开发之在任意Activity在广点通页面添加自定义布局在穿山甲页面添加任意布局的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel如何生成随机数
- 下一篇: 吃鸡怎么充钱(长期吃轻食的人都怎么样了)