Reputation: 630
I am trying to add admob ads in my application but when I am not connected to internet than too empty space is there...
I want add to appear after loading until then ad space should be utilized by the rest elements
what to do???
My Activity file is given below -
MainActivity.java `
package com.testapp.update1;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.Toast;
public class MainActivity extends Activity {
private AdView adView;
GridView grid;
String[] icons = { "Historic Places", "Railway", "City Bus", "Movie",
"Directory" };
int[] imageID = { R.drawable.ic_historic, R.drawable.ic_train,
R.drawable.ic_bus, R.drawable.ic_movie, R.drawable.ic_call };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//adding advertisement
adView = new AdView(this);
adView.setAdSize(AdSize.BANNER);
adView.setAdUnitId(CommanData.AD_UNIT_ID);
// Add the AdView to the view hierarchy. The view will have no size
// until the ad is loaded.
LinearLayout layout = (LinearLayout) findViewById(R.id.LinearLayout1);
layout.addView(adView);
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice("4963BE445DBBB277")
.build();
// Start loading the ad in the background.
CustomGrid adapter = new CustomGrid(MainActivity.this, icons, imageID);
grid = (GridView) findViewById(R.id.icongrid);
grid.setAdapter(adapter);
grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,
"You clicked at " + icons[position] + position,
Toast.LENGTH_SHORT).show();
Intent web = new Intent();
switch (position) {
case 0:
web.setClass(MainActivity.this, Places.class);
startActivity(web);
break;
case 1:
web.setClass(MainActivity.this, Railway.class);
startActivity(web);
break;
case 2:
web.setClass(MainActivity.this, BusOptions.class);
startActivity(web);
break;
case 3:
ConnectionDetector cd = new ConnectionDetector(getApplicationContext());
if(cd.isConnected()) {
web.setClass(MainActivity.this, Movies.class);
startActivity(web);
} else {
showConnectivityDialog();
}
break;
case 4:
Intent intent = new Intent(MainActivity.this,
CallDirctory.class);
startActivity(intent);
default:
break;
}
}
});
// to load add
adView.loadAd(adRequest);
// To rate application at google play
// AppRater.showRateDialog(mContext, editor)
AppRater.app_launched(MainActivity.this);
}
@Override
public void onResume() {
super.onResume();
if (adView != null) {
adView.resume();
}
}
@Override
public void onPause() {
if (adView != null) {
adView.pause();
}
super.onPause();
}
/** Called before the activity is destroyed. */
@Override
public void onDestroy() {
// Destroy the AdView.
if (adView != null) {
adView.destroy();
}
super.onDestroy();
}
public void showConnectivityDialog() {
AlertDialog.Builder notfoundDialog = new AlertDialog.Builder(MainActivity.this);
notfoundDialog.setTitle("Not Connected")
.setMessage("It seems you are not connected to internet")
.setPositiveButton("Ok", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setIcon(R.drawable.ic_launcher)
.show();
}
}
Upvotes: 3
Views: 2059
Reputation: 21
Just do like this for displaying ads, overcome the blank space when no internet connection -->
//In your activity //
ADDING Admob ADs
AdRequest adRequest = new AdRequest.Builder().addTestDevice(" xxx").build();
adView.loadAd(adRequest);
//
adView.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
}
@Override
public void onAdFailedToLoad(int error) {
adView.setVisibility(View.GONE);
}
@Override
public void onAdLeftApplication() {
}
@Override
public void onAdOpened() {
}
@Override
public void onAdLoaded() {
adView.setVisibility(View.VISIBLE);
}
});
In activity_main.xml
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="60sp"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
android:background="#FBAC4F"
ads:adUnitId="xxx"
android:visibility="gone"
/>
Surely it will help all developers.
Upvotes: 2
Reputation: 13520
Keep the visibility of
LinearLayout layout = (LinearLayout) findViewById(R.id.LinearLayout1);
i.e. the layout to which you are adding your Adview
to View.GONE
initially so it will occup no space.
Now add an AdListener
to the AdView
and make the above mentioned layout View.VISIBLE
in the onAdLoaded
method of the AdListener
. That way the layout will never be visible until the Ad
is loaded.
For eg.
AdListener googleAdListener = new AdListener()
{
@Override
public void onAdLoaded()
{
super.onAdLoaded();
try
{
(LinearLayout) findViewById(R.id.LinearLayout1).setVisibility(View.VISIBLE);
}
catch (Exception e)
{
Logger.LogException(e);
}
}
};
adView.setAdListener(googleAdListener);
NOTE: You will have to use the latest google-play-services-lib
not AdMobsSDK
Upvotes: 2