Changed the way AdMobBanner is positioned

This commit is contained in:
FalsinSoft 2020-03-08 17:07:22 +01:00
parent d894b8bef9
commit 48d2ce7254
3 changed files with 11 additions and 25 deletions

View File

@ -53,9 +53,8 @@ QAndroidAdMobBanner::QAndroidAdMobBanner(QQuickItem *parent) : QQuickItem(parent
} }
connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QAndroidAdMobBanner::ApplicationStateChanged); connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QAndroidAdMobBanner::ApplicationStateChanged);
connect(qGuiApp->primaryScreen(), &QScreen::geometryChanged, this, &QAndroidAdMobBanner::ScreenGeometryChanged); connect(qGuiApp->primaryScreen(), &QScreen::geometryChanged, this, &QAndroidAdMobBanner::ScreenGeometryChanged);
connect(this, &QQuickItem::xChanged, this, &QAndroidAdMobBanner::ItemPosChanged);
connect(this, &QQuickItem::yChanged, this, &QAndroidAdMobBanner::ItemPosChanged);
SetNewAppState(APP_STATE_CREATE); SetNewAppState(APP_STATE_CREATE);
} }
QAndroidAdMobBanner::~QAndroidAdMobBanner() QAndroidAdMobBanner::~QAndroidAdMobBanner()
@ -73,7 +72,7 @@ bool QAndroidAdMobBanner::show()
{ {
if(m_JavaAdMobBanner.isValid() && m_BannerType != TYPE_NO_BANNER && m_UnitId.isEmpty() == false) if(m_JavaAdMobBanner.isValid() && m_BannerType != TYPE_NO_BANNER && m_UnitId.isEmpty() == false)
{ {
ItemPosChanged(); UpdatePosition();
m_JavaAdMobBanner.callMethod<void>("show"); m_JavaAdMobBanner.callMethod<void>("show");
m_BannerShowed = true; m_BannerShowed = true;
return true; return true;
@ -193,20 +192,17 @@ void QAndroidAdMobBanner::ScreenGeometryChanged(const QRect &Geometry)
} }
} }
void QAndroidAdMobBanner::ItemPosChanged() void QAndroidAdMobBanner::UpdatePosition()
{ {
if(m_JavaAdMobBanner.isValid()) if(m_JavaAdMobBanner.isValid())
{ {
QAndroidJniObject BannerPosObj("com/falsinsoft/qtandroidtools/AndroidAdMobBanner$BannerPos");
const qreal PixelRatio = qApp->primaryScreen()->devicePixelRatio(); const qreal PixelRatio = qApp->primaryScreen()->devicePixelRatio();
const QPointF ScreenPos = mapToGlobal(QPointF(0,0)); const QPointF ScreenPos = mapToGlobal(QPointF(0,0));
BannerPosObj.setField<jint>("x", static_cast<int>(ScreenPos.x() * PixelRatio));
BannerPosObj.setField<jint>("y", static_cast<int>(ScreenPos.y() * PixelRatio));
m_JavaAdMobBanner.callMethod<void>("setPos", m_JavaAdMobBanner.callMethod<void>("setPos",
"(Lcom/falsinsoft/qtandroidtools/AndroidAdMobBanner$BannerPos;)V", "(II)V",
BannerPosObj.object() static_cast<int>(ScreenPos.x() * PixelRatio),
static_cast<int>(ScreenPos.y() * PixelRatio)
); );
} }
} }

View File

@ -81,7 +81,6 @@ signals:
private slots: private slots:
void ApplicationStateChanged(Qt::ApplicationState State); void ApplicationStateChanged(Qt::ApplicationState State);
void ScreenGeometryChanged(const QRect &Geometry); void ScreenGeometryChanged(const QRect &Geometry);
void ItemPosChanged();
private: private:
const QAndroidJniObject m_JavaAdMobBanner; const QAndroidJniObject m_JavaAdMobBanner;
@ -112,4 +111,5 @@ private:
APP_STATE_DESTROY APP_STATE_DESTROY
}; };
void SetNewAppState(APP_STATE NewState); void SetNewAppState(APP_STATE NewState);
void UpdatePosition();
}; };

View File

@ -52,7 +52,7 @@ public class AndroidAdMobBanner
public AndroidAdMobBanner(Activity ActivityInstance) public AndroidAdMobBanner(Activity ActivityInstance)
{ {
mViewGroup = (ViewGroup)ActivityInstance.getWindow().getDecorView().getRootView(); mViewGroup = (ViewGroup)ActivityInstance.getWindow().getDecorView().findViewById(android.R.id.content);
mBannerListener = new BannerListener(); mBannerListener = new BannerListener();
mActivityInstance = ActivityInstance; mActivityInstance = ActivityInstance;
} }
@ -110,7 +110,7 @@ public class AndroidAdMobBanner
UiThread.exec(); UiThread.exec();
} }
public void setPos(final BannerPos pos) public void setPos(final int posX, final int posY)
{ {
if(mBannerView == null) if(mBannerView == null)
{ {
@ -121,12 +121,8 @@ public class AndroidAdMobBanner
{ {
public void runOnUIThread() public void runOnUIThread()
{ {
Rect VisibleFrame = new Rect(); mBannerView.setX(posX);
mBannerView.setY(posY);
mActivityInstance.getWindow().getDecorView().getWindowVisibleDisplayFrame(VisibleFrame);
mBannerView.setX(pos.x);
mBannerView.setY(VisibleFrame.top + pos.y); // Add the height of the system status bar on top
} }
}); });
UiThread.exec(); UiThread.exec();
@ -329,12 +325,6 @@ public class AndroidAdMobBanner
} }
} }
public static class BannerPos
{
public int x = 0;
public int y = 0;
}
public static class BannerSize public static class BannerSize
{ {
public int width = 0; public int width = 0;