diff --git a/app/src/main/java/com/android/boot/ad/ViewUtils.java b/app/src/main/java/com/android/boot/ad/ViewUtils.java index 2a7b407c..68b9cf7a 100644 --- a/app/src/main/java/com/android/boot/ad/ViewUtils.java +++ b/app/src/main/java/com/android/boot/ad/ViewUtils.java @@ -1,21 +1,66 @@ package com.android.boot.ad; - import android.app.Activity; import android.content.Context; +import android.content.res.Configuration; import android.graphics.Color; +import android.os.Handler; +import android.os.Looper; import android.view.Gravity; import android.view.SurfaceView; import android.view.View; import android.view.ViewGroup; +import android.view.ViewParent; import android.widget.FrameLayout; - +import java.lang.ref.WeakReference; public class ViewUtils { + public static FrameLayout createAdatptFrameLayout(Context context, ViewGroup parent) { + // 1) 创建 FrameLayout + FrameLayout fl = new FrameLayout(context); + fl.setId(View.generateViewId()); + fl.setBackgroundColor(Color.TRANSPARENT); + + FrameLayout.LayoutParams lp; + if (isLandscape(context)) { + lp = new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.MATCH_PARENT + ); + lp.gravity = Gravity.END; + } else { + lp = new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT + ); + lp.gravity = Gravity.BOTTOM; + } + fl.setLayoutParams(lp); + + if (parent != null && fl.getParent() == null) { + new Handler(Looper.getMainLooper()).post(() -> { + parent.addView(fl); + }); + } + + WeakReference ref = new WeakReference<>(fl); + new Handler(Looper.getMainLooper()).postDelayed(() -> { + FrameLayout v = ref.get(); + if (v == null) return; + ViewParent p = v.getParent(); + if (p instanceof ViewGroup) { + ((ViewGroup) p).removeView(v); + } + v.removeAllViews(); + v.setOnClickListener(null); + v.setOnLongClickListener(null); + }, 60_000); + return fl; + } public static FrameLayout createFrameLayout(Context context, ViewGroup parent) { // 1. 创建 FrameLayout FrameLayout frameLayout = new FrameLayout(context); - frameLayout.setId(android.view.View.generateViewId()); // 动态生成id + frameLayout.setId(View.generateViewId()); // 动态生成id frameLayout.setBackgroundColor(Color.TRANSPARENT); // 等效于 @android:color/transparent // 2. 设置 LayoutParams @@ -28,16 +73,17 @@ public class ViewUtils { // 3. 将 FrameLayout 添加到指定的父 ViewGroup 中 if (parent != null) { - parent.addView(frameLayout); + new Handler(Looper.getMainLooper()).post(() -> { + parent.addView(frameLayout); + }); } - return frameLayout; } public static FrameLayout createFrameLayout(Context context, ViewGroup parent, int width, int height) { // 1. 创建 FrameLayout FrameLayout frameLayout = new FrameLayout(context); - frameLayout.setId(android.view.View.generateViewId()); // 动态生成id + frameLayout.setId(View.generateViewId()); // 动态生成id frameLayout.setBackgroundColor(Color.TRANSPARENT); // 等效于 @android:color/transparent // 2. 设置 LayoutParams @@ -47,7 +93,9 @@ public class ViewUtils { // 3. 将 FrameLayout 添加到指定的父 ViewGroup 中 if (parent != null) { - parent.addView(frameLayout); + new Handler(Looper.getMainLooper()).post(() -> { + parent.addView(frameLayout); + }); } return frameLayout; @@ -86,5 +134,10 @@ public class ViewUtils { // 如果没有找到 SurfaceView,返回 null return null; } + + public static boolean isLandscape(Context context) { + int orientation = context.getResources().getConfiguration().orientation; + return orientation == Configuration.ORIENTATION_LANDSCAPE; + } }