2014-09-11 9 views
10

Ich brauche Hilfe, um ein Leerzeichen in einer GridView am unteren Rand hinzuzufügen. Dieser Space sollte innerhalb des letzten Elements der GridView liegen. Dieser Bereich sollte nicht wie ein Rand zum nächsten Element funktionieren, er sollte nur sichtbar sein, wenn der Benutzer zum unteren Rand der GridView scrollt. Der Grund dafür ist ein Werbebanner, das den unteren Teil des GridViews teilweise abdeckt. Abgesehen von diesem Hindernis sollte der Benutzer immer noch den gesamten Inhalt des GridView sehen können, weshalb der Platz am unteren Rand des GridViews benötigt wird.So fügen Sie zusätzlichen Platz im unteren Bereich einer GridView hinzu

left: ad (blue) covers part of GridView elements (orange); right: ad covers the space in the bottom of the GridView links: ad (blau) bedeckt einen Teil der GridView-Elemente (orange); rechts: Anzeige deckt den Raum in der Unterseite des Gridview

same approach but with space at the bottom

Beispiel, wie es aussehen wird, stellen Sie sich vor, dass der Raum an der Unterseite ist, nicht an der Spitze.

Bisher habe ich versucht, mit den Padding und Marging Variablen für Bottom zu arbeiten, aber sie sind nicht die richtigen Variablen für das Problem. Ich suchte auch durch stackoverflow, ich fand einige ähnliche Fragen wie: Add extra space to bottom of a GridView or ListView oder: Adding a footer View to a multi-column GridView in Android?. Aber die Lösungen scheinen nicht zu meinem Fall zu passen und außerdem suche ich nach einer Lösung innerhalb der Layout-Datei und nicht innerhalb des Quellcodes (wenn es natürlich etwas gibt).

Ihre Hilfe wird sehr geschätzt.

+0

Satz bottomPadding hinzufügen von Gridview – Meenal

+0

oder Sie können versuchen, ein leeres View-Element am unteren Rand –

+0

Ich brauche den Platz in der GridView am unteren Rand, nicht unter dem GridView. Deshalb funktionieren die beiden oben genannten Ansätze nicht für mich. – Elementary

Antwort

22

Um dies zu erreichen, müssen Sie einen unteren Padding zu Ihrem GridView hinzufügen, aber auch das clipToPadding Verhalten deaktivieren. Versuchen Sie, den XML-Code unten:

<GridView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="50dp" 
    android:clipToPadding="false"/> 

Sie es auch von Code tun können, wenn Sie wollen. Der Vorteil ist, dass Sie den Offset dynamisch in Code berechnen kann:

gridView.setPadding(int left, int top, int right, int bottom); 
gridView.setClipToPadding(false); 

Anmerkung: Ohne die clipToPadding Verhalten deaktivieren werden Sie mit persistenten leeren Bereich auf der Unterseite Ihres GridView am Ende, so deaktivieren es sehr wichtig ist.


Bonus: Hier ist auch eine schöne Verbindung über clipToPadding Parameter in ListView oder GridView mit: https://plus.google.com/+AndroidDevelopers/posts/LpAA7q4jw9M

+0

Danke Ich habe den clipToPadding noch nicht probiert, ich werde es versuchen. – Elementary

+0

Leider funktioniert das nicht für mich. Es gibt immer noch keinen zusätzlichen Platz im GridView auf der Unterseite. Die überdeckende Anzeige blockiert den Inhalt der GridView nach dem Scrollen bis zum Ende. – Elementary

+1

Das muss funktionieren ... Siehe den Link in meiner bearbeiteten Antwort. Du musst etwas falsch gemacht haben. Ich benutze es selbst in vielen meiner Apps. Vielleicht müssen Sie einfach größere Padding einstellen oder Sie überschreiben dies irgendwo (in Code zum Beispiel). –

0

Machen Sie benutzerdefinierte Gridview und in Getview() -Methode, verwenden Sie Ansicht, die Raum wie Sie wollen.

+0

Ich suche nach einer einfacheren Lösung mit dem vorhandenen GridView, wenn möglich. – Elementary

+0

Ohne benutzerdefinierte Gridview ist das nicht möglich. Du solltest zumindest etwas anstrengen :) – Pankaj

+0

Natürlich habe ich mich hingesetzt und werde mich anstrengen. Und natürlich können Sie am Ende immer eine benutzerdefinierte Kontrolle vornehmen. Aber warum sollte ich das tun, solange es eine Möglichkeit für eine einfachere Lösung mit der bestehenden Kontrolle gibt? – Elementary

-3
<GridView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:marginBottom="50dp" 
    android:clipToPadding="false"/> 
+0

Dies ist keine gültige Lösung ... margin verschiebt die 'GridView' nach oben, wodurch dauerhafter leerer Platz unterhalb von 'GridView' entsteht. –

0

Das ist, was ich bisher hatte:

In Ihrer Aktivität:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.grid); 

     final TextView txt = (TextView) findViewById(R.id.textView1); 
     txt.setVisibility(View.GONE); 

     final GridView grid = (GridView) findViewById(R.id.gridViewCustom); 


     grid.setOnScrollListener(new OnScrollListener() { 

      @Override 
      public void onScrollStateChanged(AbsListView view, int scrollState) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onScroll(AbsListView view, int firstVisibleItem, 
        int visibleItemCount, int totalItemCount) { 
       if((firstVisibleItem + visibleItemCount) == totalItemCount){//it means you are at the end of the gridview 
        txt.setVisibility(View.VISIBLE); 
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 50); 
        params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE); 
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); 

        RelativeLayout.LayoutParams paramsGrid = (RelativeLayout.LayoutParams) grid.getLayoutParams(); 
        paramsGrid.addRule(RelativeLayout.ABOVE, txt.getId()); 

        txt.setLayoutParams(params); 
        grid.setLayoutParams(paramsGrid); 

       } 
      } 
     }); 
    } 

.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 

    <GridView 
     android:id="@+id/gridViewCustom" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/textView1" 
     android:layout_alignParentRight="true" 
     android:layout_margin="4dp" 
     android:columnWidth="80dp" 
     android:gravity="center" 
     android:numColumns="auto_fit" 
     android:stretchMode="columnWidth" > 
    </GridView> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:text="" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

</RelativeLayout> 
+0

Ich sehe, dass dies eine mögliche Lösung ist, aber zuerst möchte ich sehen, ob ich die Lösung von @Maciej zum Funktionieren bringen kann. – Elementary

+0

Ich habe die Lösung von Maciej genommen, weil Sie nur zwei Parameter im Layout des Grids hinzufügen müssen, das war's. Keine Problemumgehung und kein zusätzlicher Quellcode benötigt. – Elementary

0

zu folgendem Ergebnis GridView with a space above the button

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <Button 
     android:id="@+id/btn_submit" 
     style="@style/Base.Widget.AppCompat.Button.Colored" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/gv_someGrid" 
     android:layout_margin="10dp" 
     android:layout_alignParentBottom="true" 
     android:text="submit" /> 

    <GridView 
     android:id="@+id/gv_someGrid" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentTop="true" 
     android:layout_above="@+id/btn_submit" /> 
</RelativeLayout> 

Der Trick ist, erhalten Gridview im Grunde dieser Taste zu erklären, dann Einschränkung layout_above = "@ + id/your_ID"