2012-08-27 16 views
8

Sto provando a creare un codice GridView nella mia classe java e tutto funziona correttamente. Il problema è il riempimento automatico di 5 pixel attorno allo GridView. Nel xml riesco a rimuoverlo utilizzando:Rimuovi spazio extra attorno a GridView a livello di codice

android:listSelector="@null" 

Ma io non riesco a fare qualcosa di simile in java. Ho provato alcune soluzioni alternative come rendere il10 pixel più grande dello schermo effettivo senza fortuna.

Qualcuno ha un codice per questo?

Edit:

La risposta da me non risolve il problema. C'è ancora una taglia in corso. Ecco il mio codice GridView:

GridView gridView = new GridView(this); 
    gridView.setNumColumns(someInt); 
    gridView.setAdapter (new MyCustomAdapter(this)); 
    gridView.setLayoutParams(new GridView.LayoutParams(
      customValue, 
      LayoutParams.FILL_PARENT, 
      Gravity.CENTER_HORIZONTAL) 
    ); 

risposta

2

risolto sorta di by:

gridView.setPadding(-5, 0, -5, 0); 

ma è necessario imbottitura diverso per schermi differenti. Ma non è una soluzione completa. Saranno accettate modifiche funzionali di questo codice.

0

setSelector(int) (dal AbsListView) non è quello che stai cercando?

Come setSelector(0)

+0

Non va bene. Causa crash o errore nel file. Vuole che lo corregga su setSelected. – Magakahn

+0

Non dovrebbe essere così, puoi mostrare il tuo codice con l'inizializzazione di GridView? – marwinXXII

+0

un pò strano. 'gridView.setSelector (0)' dovrebbe funzionare. – marwinXXII

2

per ottenere lo stesso effetto come l'utilizzo di android:listSelector="@null", ma nel codice è necessario utilizzare setSelector() come detto marvinXXII. Ma è necessario passare un ResourceId valido o utilizzare la variante setSelector(Drawable sel). Sfortunatamente non è possibile passare null in quel metodo che porterà a NullPointerException. La soluzione descritta here è usare questo:

gridView.setSelector(android.R.color.transparent); 
+0

Meglio ma sono ancora i pixel sul lato di GridView. – Magakahn

6
  • Un modo per garantire l'imbottitura appare stessa su schermi con diversa densità è convertendolo a DIP unità.

    int padding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, -5, 
                getResources().getDisplayMetrics()); 
    
  • Altra cosa che si può provare è quello di definire un drawable nulla in xml ..

    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
        <drawable name="null_drawable">@null</drawable> 
        ... 
    </resources> 
    

    quindi chiamare setSelector(R.drawable.null_drawable);

Aggiornamento:

  • Definisci il tuo GridView nel suo xml e gonfialo.

    layout/mygrid.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <GridView 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:listSelector="@null"/> 
    

    in Java,

    GridView gridView = (GridView)inflater.inflate(R.layout.mygrid, null); 
    gridView.setLayoutParams(new GridView.LayoutParams(customValue, 
             LayoutParams.FILL_PARENT)); 
    gridView.setNumColumns(someInt); 
    gridView.setAdapter (new MyCustomAdapter(this)); 
    
+0

Ottiene l'errore nel file sul codice java e nessuna modifica sull'xml. – Magakahn

+0

Vuoi dire che è andato in crash? o era un errore di sintassi? era l'errore? – Ronnie

+0

Ho aggiornato la mia answer..check queste opzioni – Ronnie

1

Penso che si possa utilizzare setPadding per rimuovere questo problema durante la creazione GridView dinamica.

int grids_height = (int) TypedValue.applyDimension(
      TypedValue.COMPLEX_UNIT_DIP, (int) (Row_num * 80), 
      getResources().getDisplayMetrics()); 
    Log.v("", "" + grids_height); 
    gridview = new GridView(this); 
    gridview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 
      grids_height)); 
    gridview.setPadding(0, 3, 0, 0); 
    gridview.setBackgroundColor(Color.TRANSPARENT); 
    gridview.setNumColumns(7); 
    gridview.setVerticalSpacing(1); 
    gridview.setHorizontalSpacing(1); 
    gridview.setGravity(Gravity.CENTER_HORIZONTAL); 
    gridview.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); 
+0

Non va bene. Ho sperimentato parecchio setPadding e ho dovuto impostare padding diversi per schermi diversi per adattarli. E i dispositivi Android hanno un sacco di diversi schermi. – Magakahn

0

Utilizzando le seguenti impostazioni funziona per me:

public ContactContainer(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    gallery = new GridView(context, attrs); 
    gallery.setNumColumns(numColumns); 
    gallery.setStretchMode(stretchMode); 
    gallery.setSmoothScrollbarEnabled(smoothScrollbar); 
    gallery.setSelector(listSelector); 
    gallery.setGravity(Gravity.CENTER_HORIZONTAL); 
    this.addView(gallery); 
} 

lo uso in combinazione con questo pezzo di codice XML:

<de.ramicro.SClip.components.ContactContainer 
    android:id="@+id/gridview_gallery_contacts" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_above="@id/contact_gallery_bottom_bar" 
    android:layout_below="@id/contact_gallery_top_bar" 
    android:padding="0dip"/> 

Penso che quello che ti serve sia essere la combinazione di un Selettore e di un set di gravità trasparenti su CENTER_HORIZONTAL.

+0

Puoi caricare per favore il tuo stretchMode, smoothScrollbar e listSelector? – Magakahn

+0

private int listSelector = android.R.color.transparent; private int numColumns = 2; private boolean smoothScrollbar = true; private int stretchMode = GridView.STRETCH_COLUMN_WIDTH; – Eduardo

Problemi correlati