Wie man Bannerwerbung intermittierend in gridview zeigt

Ich entwickle eine Android-App, die einen Bildschirm ähnlich dem folgenden Bild haben wird – Bildbeschreibung hier eingeben

Bitte beachten Sie die Banneranzeige zwischen den Zellen. Als GridView nicht unterstützt solche Spannen von Spalten bin ich in einem Verlust, was zu tun ist.

  • Wie kann man PDFs in einer Android App erstellen?
  • ContentProvider Zerstörung / Lebenszyklus
  • Wie kann ich Zoom-Steuerelemente aktivieren und in einem WebView vergrößern?
  • Android Material Design Datepicker mit AppCompat
  • Erstellen Sie ein Android-Start-Symbol für Website
  • Update Android ADT Tool auf 21.1.0 ab 21.0.1
  • Bitte geben Sie alle Vorschläge an. Danke im Voraus.

  • Es ist möglich, ein Video-Thumbnail aus einer URL auf Android 4 und höher anzuzeigen?
  • Android: Drehen Sie Animation zurück zu seinem realen Zustand nach Beendigung der Animation?
  • Android Ersetzen Fragment innerhalb eines Fragments
  • Android 4.3: BLE: Filterverhalten von startLeScan ()
  • Android: Horizontale Listenansicht in vertikaler Bildlaufansicht?
  • Ein OnClickHandler für mehrere Schaltflächen
  • 4 Solutions collect form web for “Wie man Bannerwerbung intermittierend in gridview zeigt”

    Sie müssen zwei Layouts für Elemente in Gridview Adapter erstellen. Eines für das, was du zeigen willst und andere für adView und abwechselnd Platz beim Erstellen von View.

    Überprüfen Sie dies , um mehr Idee zu bekommen.

    Nun, ich glaube, ich kann dir Beispiele für Code geben … Zuerst habe ich AsymmetricGridView hinzugefügt.

    compile 'com.felipecsl.asymmetricgridview:library:2.0.1' 

    Ich benutze diese Anleitung . Es stellte sich heraus, wie ein zusätzlicher Adapter:

      ListAdapter ia = new PreviewsAdapter(mContext, currentPreviews).setAdsWidth(numRows); gridListView.setRequestedColumnWidth(Utils.dpToPx(mContext, 80)); gridListView.setAllowReordering(true); AsymmetricGridViewAdapter asymmetricAdapter = new AsymmetricGridViewAdapter<>(mContext, gridListView, ia); gridListView.setAdapter(asymmetricAdapter); gridListView.setOnItemClickListener(gridviewOnItemClickListener); 

    Achten Sie auf numRows . Vor dem Hinzufügen einer physischen Ansicht wissen wir nicht, wie viel wir Spalten haben werden. Und wir können nicht wissen, wie viele Zellen (breit) annonciert. Es ist möglich, dass Sie die Standardmethode AsymmetricGridView verwenden können.

    Ich musste diesen schrecklichen Code benutzen (in ihm verstopfte meine Konstanten.

      Display display = mContext.getWindowManager().getDefaultDisplay(); Point size = new Point(); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2){ display.getSize(size); } else { size.set(display.getWidth(), display.getHeight()); } final int mSize; if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { mSize = Math.min(size.x, size.y); } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { mSize = Math.max(size.x, size.y) - Math.min(size.x, size.y); } else { mSize = Math.min(size.x, size.y); } int numRows = Math.round((float) mSize / (float) Utils.dpToPx(mContext, 100)); // 80 width cell item + 20 padding 

    Alle Magie im Adapter PreviewsAdapter erweitert BaseAdapter

    Bestimmen Sie, wo es Werbung gibt. Ich will in der Mitte

     adsId = currentPreviews.size() / 2; 

    Forg eine Anzahl von Einträgen. Unsere Einträge nums + ad

     public int getCount() { return currentPreviews.size() + 1; } 

    Jetzt werden wir das Objekt zurückgeben. Es sind entweder unsere Mitglieder oder Werbung.

     public Object getItem(int position) { if(adsId != position) { if(position >= adsId) { position-=1; } return currentPreviews.get(position); } else { return new AdsItem(this.numRows, 1); } } 

    Unser Objekt muss AsymmetricItem implementieren. Werbung auch. Hier ist ein Beispiel für die Objektklassenwerbung.

     public class AdsItem implements AsymmetricItem { private final int width; private final int height; public AdsItem(int adsWidth, int adsHeight) { width = adsWidth; height = adsHeight; } @Override public int getColumnSpan() { return width; } @Override public int getRowSpan() { return height; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { } } 

    GetRowSpan, getColumnSpan bestimmen die Breite und Höhe des Objekts Ansicht in Zellen.

    Und hier ist die Methode, um zu sehen:

      public View getView(int position, View convertView, ViewGroup parent) { if(adsId != position) { ImageView imageView; if (convertView == null) { imageView = new SquareImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.MATCH_PARENT, GridView.LayoutParams.MATCH_PARENT)); imageView.setPadding(10, 10, 10, 10); } else { imageView = (SquareImageView) convertView; } AvatarPart ap = (AvatarPart) getItem(position); Bitmap b = imgs.get(ap.getFile()); imageView.setImageBitmap(b); imageView.invalidate(); return imageView; } else { String adId = mContext.getResources().getString(R.string.add_id); AdView mAdView = new AdView(mContext); mAdView.setPadding(0, 15, 0, 15); mAdView.setAdSize(AdSize.BANNER); mAdView.setAdUnitId(adId); AdRequest adRequest = new AdRequest.Builder() .build(); if(mAdView.getAdSize() != null ) mAdView.loadAd(adRequest); return mAdView; } } 

    Aber ich bin mir nicht sicher über diese Zeile:

     imageView = (SquareImageView) convertView; 

    Ich weiß nicht, ob du AdView bekommst . Aber während es nicht kaputt ist: D

    Um mit Klicks zu handeln, musste ich eine andere Methode schreiben.

     public AvatarPart getItemWithoutAds(int position) { if(position == adsId) return null; if(position >= adsId) { position-=1; } return currentPreviews.get(position); } 

    Das ist sicher nicht der schönste Code, aber es funktioniert. Ergebnis: Bildbeschreibung hier eingeben

    Implementieren Sie einen benutzerdefinierten ArrayAdapter , hier ist ein Beispiel: Entwickeln eines benutzerdefinierten Adapters

    Meiner Meinung nach ist der beste Weg, um es zu tun, um RecyclerView mit GridLayoutManager zu verwenden. Geben Sie einfach SpanSizeLookup für GridLayoutManager an, das die Größe jeder Position bestimmen kann. Zum Beispiel muss die erste Position die ganze Reihe wiederholen

     //Two items in a row int spanCount = 2; GridLayoutManager manager = new GridLayoutManager(getActivity(),spanCount); manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { return (position == 0 ? spanCount : 1); } }); 

    In Ihrem Adapter gibt es 2 Arten von Artikeln – übliche Artikel und Werbeartikel

    Es ist vorzuziehen, Element-Auflagen über ItemDecoration zu setzen.

    Ich kann bei Bedarf mehr Code anbieten

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.