diff --git a/LibraryAd/src/main/java/com/tfq/ad/utils/AdView.java b/LibraryAd/src/main/java/com/tfq/ad/utils/AdView.java
new file mode 100644
index 0000000..8017e75
--- /dev/null
+++ b/LibraryAd/src/main/java/com/tfq/ad/utils/AdView.java
@@ -0,0 +1,176 @@
+package com.tfq.ad.utils;
+
+
+import android.app.Activity;
+import android.view.View;
+import android.view.ViewTreeObserver;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+
+import com.tfq.ad.ad.UIUtils;
+import com.tfq.ad.app.ADConstants;
+
+public class AdView {
+
+ /**
+ * 设置AdView的高度,如果广告视图不能填充满,那么广告view就在最底部,否则就在主视图下面
+ *
+ * @param mActivity 上下文
+ * @param view rootView视图
+ * @param idRes 资源id
+ * @param idResLinearLayout LinearLayout资源id
+ * @param flContent 广告view
+ */
+ public void adjustAdHeight(Activity mActivity, View view, int idRes, int idResLinearLayout, FrameLayout flContent) {
+ if (ADConstants.AD_NATIVE) {
+ // 设置动态高度监听
+ flContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ int adHeight = flContent.getHeight();
+ int adWidth = flContent.getWidth();
+ if (adHeight > 0 && adWidth > 0) {
+ // 移除监听(避免重复调用)
+ flContent.getViewTreeObserver().removeOnGlobalLayoutListener(this);
+
+ // 调整广告容器和上方占位View的高度
+ adjustAdContainerHeight(mActivity, idRes, idResLinearLayout, adHeight, view, flContent);
+ }
+ LogAd.e("fl_content Height=" + adHeight + " Width=" + adWidth);
+ }
+ });
+ }
+ }
+
+ /**
+ * 调整广告容器和上方占位View的高度
+ *
+ * @param adHeight 广告容器高度
+ * @param rootView 根视图
+ * @param idRes 资源id
+ */
+ private void adjustAdContainerHeight(Activity mActivity, int idRes, int idResLinearLayout, int adHeight, View rootView, FrameLayout flContent) {
+ if (rootView == null || mActivity == null) return;
+
+ // 获取屏幕高度和可用高度
+ int screenHeight = mActivity.getResources().getDisplayMetrics().heightPixels;
+ int availableHeight = getAvailableScreenHeight(mActivity);
+
+ // 获取主要View
+ LinearLayout mainLinearLayout = rootView.findViewById(idResLinearLayout);
+ View spacerView = rootView.findViewById(idRes);
+
+ if (mainLinearLayout != null && spacerView != null) {
+ // 测量主内容区域的高度(不包含广告和占位View)
+ mainLinearLayout.measure(
+ View.MeasureSpec.makeMeasureSpec(mActivity.getResources().getDisplayMetrics().widthPixels, View.MeasureSpec.EXACTLY),
+ View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
+ );
+ int mainContentHeight = mainLinearLayout.getMeasuredHeight();
+
+ // 计算广告区域的完整高度(广告高度 + 上下间距)
+ int adAreaHeight = adHeight + UIUtils.dp2px(mActivity, 20); // 20dp是广告上下间距
+
+ // 计算总高度:主内容高度 + 广告区域高度
+ int totalHeight = mainContentHeight + adAreaHeight;
+
+ LogAd.e("=== 布局高度分析 ===");
+ LogAd.e("屏幕高度: " + screenHeight + "px, 可用高度: " + availableHeight + "px");
+ LogAd.e("主内容高度: " + mainContentHeight + "px, 广告高度: " + adHeight + "px");
+ LogAd.e("广告区域高度: " + adAreaHeight + "px, 总高度: " + totalHeight + "px");
+ LogAd.e("是否完全显示: " + (totalHeight <= availableHeight ? "是" : "否"));
+
+ // 设置广告容器的布局参数
+ LinearLayout.LayoutParams adParams = (LinearLayout.LayoutParams) flContent.getLayoutParams();
+ LinearLayout.LayoutParams spacerParams = (LinearLayout.LayoutParams) spacerView.getLayoutParams();
+
+ // 计算剩余空间(可以是负数)
+ int remainingHeight = availableHeight - totalHeight;
+
+ LogAd.e("=== 自动布局策略 ===");
+ LogAd.e("主内容高度: " + mainContentHeight + "px");
+ LogAd.e("广告高度: " + adHeight + "px");
+ LogAd.e("间距高度: " + UIUtils.dp2px(mActivity, 20) + "px");
+ LogAd.e("总高度: " + totalHeight + "px");
+ LogAd.e("可用高度: " + availableHeight + "px");
+ LogAd.e("剩余空间: " + remainingHeight + "px");
+
+ if (remainingHeight >= 0) {
+ // 情况1: 内容完全能显示,自动分配剩余空间
+ LogAd.e("【自动布局1】内容完全显示,占位View自动占用剩余空间: " + remainingHeight + "px");
+
+ // 设置广告为固定高度(保持广告原始尺寸)
+ adParams.height = adHeight;
+ adParams.width = FrameLayout.LayoutParams.WRAP_CONTENT;
+ flContent.setLayoutParams(adParams);
+
+ // 占位View自动占用剩余空间(动态计算)
+ spacerParams.height = remainingHeight;
+ spacerParams.width = LinearLayout.LayoutParams.MATCH_PARENT;
+ spacerParams.weight = 0; // 明确不使用weight
+ spacerView.setLayoutParams(spacerParams);
+
+ } else {
+ // 情况2: 内容超出屏幕,需要滚动,广告完全自适应
+ LogAd.e("【自动布局2】内容超出屏幕 " + Math.abs(remainingHeight) + "px,广告完全自适应");
+
+ // 设置广告为完全自适应(wrap_content)
+ adParams.height = FrameLayout.LayoutParams.WRAP_CONTENT;
+ adParams.width = FrameLayout.LayoutParams.WRAP_CONTENT;
+ flContent.setLayoutParams(adParams);
+
+ // 设置上方占位View高度为0(不占用空间)
+ spacerParams.height = 0;
+ spacerParams.width = LinearLayout.LayoutParams.MATCH_PARENT;
+ spacerParams.weight = 0;
+ spacerView.setLayoutParams(spacerParams);
+ }
+
+ LogAd.e("最终效果 - 占位View: " + spacerParams.height + "px, 广告: " + adParams.height);
+ }
+ }
+
+ /**
+ * 获取可用的屏幕高度(减去状态栏、导航栏等)
+ */
+ private int getAvailableScreenHeight(Activity mActivity) {
+ int screenHeight = mActivity.getResources().getDisplayMetrics().heightPixels;
+ int statusBarHeight = getStatusBarHeight(mActivity);
+ int navigationBarHeight = getNavigationBarHeight(mActivity);
+
+ return screenHeight - statusBarHeight - navigationBarHeight;
+ }
+
+ /**
+ * 获取导航栏高度
+ */
+ private int getNavigationBarHeight(Activity mActivity) {
+ int result = 0;
+ int resourceId = mActivity.getResources().getIdentifier("navigation_bar_height", "dimen", "android");
+ if (resourceId > 0) {
+ result = mActivity.getResources().getDimensionPixelSize(resourceId);
+ }
+ return result;
+ }
+
+ /**
+ * 检查并调整布局
+ */
+ public void checkAndAdjustLayout(Activity mActivity, int idRes, int idResLinearLayout, View rootView, FrameLayout flContent) {
+ if (flContent != null && flContent.getHeight() > 0) {
+ adjustAdContainerHeight(mActivity, idRes, idResLinearLayout, flContent.getHeight(), rootView, flContent);
+ }
+ }
+
+ /**
+ * 获取状态栏高度
+ */
+ private int getStatusBarHeight(Activity mActivity) {
+ int result = 0;
+ int resourceId = mActivity.getResources().getIdentifier("status_bar_height", "dimen", "android");
+ if (resourceId > 0) {
+ result = mActivity.getResources().getDimensionPixelSize(resourceId);
+ }
+ return result;
+ }
+}
diff --git a/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar b/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar
index a9f9a44..49d5aa4 100644
Binary files a/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar and b/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar differ
diff --git a/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.md5 b/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.md5
index a38cdde..ef166be 100644
--- a/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.md5
+++ b/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.md5
@@ -1 +1 @@
-31ae7795386ce894b560e3e83ad09240
\ No newline at end of file
+71fee82897f2daa3506d41ae26a2b847
\ No newline at end of file
diff --git a/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.sha1 b/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.sha1
index 957e944..36e5899 100644
--- a/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.sha1
+++ b/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.sha1
@@ -1 +1 @@
-e13f8c834e5755f7dc3ed51a31e0589da862e6f0
\ No newline at end of file
+221f138c032b70e738e6d01632e79f83a2fd32b9
\ No newline at end of file
diff --git a/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.sha256 b/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.sha256
index fc5c284..73befb6 100644
--- a/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.sha256
+++ b/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.sha256
@@ -1 +1 @@
-ec8f2d1ad62d8fc249ce5e0d93bdb9fdcfde5e7ffe586a11ecef36f9cf3ee474
\ No newline at end of file
+312074a677c0e4c0c7eb5718a148dbfb1cc2d9c13e712f2ccfa3bad77b1b19ca
\ No newline at end of file
diff --git a/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.sha512 b/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.sha512
index 2a6d1bc..1f71bbd 100644
--- a/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.sha512
+++ b/maven/com/chuangketie/jk/lib_ad/1.0.1/lib_ad-1.0.1.aar.sha512
@@ -1 +1 @@
-cab6e2ab2ada9ddf2eabaac188e79a93707ffd61e1e19c2a44132076238cdf972b121ca220273fe8c7cddd380080be4d1fd34173930b0e2e1d07de431ef8d9c8
\ No newline at end of file
+d4ac3f5a9299c260c5ad153f4e55bbdcd8b13b640d9168dce5b15b1275aaae2b00dccbde7ad89fb64175aa0a5f5f8bd3c0395d1a170231b364265f6728017755
\ No newline at end of file
diff --git a/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml b/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml
index b04e488..7fe10d6 100644
--- a/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml
+++ b/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml
@@ -9,6 +9,6 @@
1.0.0
1.0.1
- 20251120060848
+ 20251201091842
diff --git a/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.md5 b/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.md5
index abcf7f7..55439e8 100644
--- a/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.md5
+++ b/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.md5
@@ -1 +1 @@
-650335f76d652ed2202d121b43cd474d
\ No newline at end of file
+cc563969b719fae84e7f412f29bf8cb5
\ No newline at end of file
diff --git a/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.sha1 b/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.sha1
index d633a98..7de5eff 100644
--- a/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.sha1
+++ b/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.sha1
@@ -1 +1 @@
-0acbd9e4bbde3104ec5d7586b859227d87356a4e
\ No newline at end of file
+29ff624b2703074cdce94e57b778d8057866f95e
\ No newline at end of file
diff --git a/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.sha256 b/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.sha256
index 720a12e..e45448b 100644
--- a/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.sha256
+++ b/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.sha256
@@ -1 +1 @@
-e446a896a442cce95dcfe4bb28dacfe039b0d7be62eef2cc87c16278ed22c98a
\ No newline at end of file
+c1c1a937455330995daca44f95bd023c8f729db23eadef5d89a99aeecf21895e
\ No newline at end of file
diff --git a/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.sha512 b/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.sha512
index 41f5e19..a178760 100644
--- a/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.sha512
+++ b/maven/com/chuangketie/jk/lib_ad/maven-metadata.xml.sha512
@@ -1 +1 @@
-02d4a0cc0cb4d4930ad74529d5a9ee89e294b2524f74fd23b909e6033977ef86392eb6daf0cbd9fb9de5524930bb53187892a899f72ade61dfdaaddf5ed197ac
\ No newline at end of file
+2bbc38bcf059ee48f12f0489bbf2f6c40f890501b180a74cfcc0806b4e269ff3a18e8ba0191f8371998585cd4a738bf46a5d6e4bb7634638e9221007b1e6d024
\ No newline at end of file