2013-04-10 11 views
7

Ho una vista griglia dinamica. Significa che il suo contenuto varia Quindi, se il numero di elementi aumenta, lo scorrimento verticale. Voglio farlo come scorrimento orizzontale.Come far scorrere la vista della griglia orizzontalmente e non verticalmente in Android?

Si prega di suggerire qualche soluzione per questo.

+0

http://stackoverflow.com/questions/5725745/horizontal-scrolling-grid-view – Nermeen

+0

Ho provato questo. Ma stava chiedendo il contenuto fisso nella griglia. –

risposta

0

Si può provare a mettere il GridView in un HorizontalScrollView. Puoi provare ad impostare l'altezza fissa su GridView all'interno dello HorizontalScrollView.

Quindi è possibile calcolare in modo dinamico il numero di colonne di GridView in base al contenuto e utilizzare il metodo setNumColumns(int) per impostarlo.

+0

Ottima idea! Lo proveremo sicuramente. – marienke

+3

Non funziona. Cerca semplicemente di scricchiolare tutti gli elementi nel viewport, tuttavia non viene visualizzata alcuna scroll orizzontale – midnight

+0

Puoi provare a impostare la larghezza fissa su 'GridView' all'interno di 'HorizontalScrollView'. – jaibatrik

1

è possibile utilizzare la libreria di terze parti two-way grid view. funziona benissimo per lo scorrimento orizzontale oppure è possibile utilizzare RecyclerView

2
 <HorizontalScrollView 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@+id/seatLegendLayout"> 

     <FrameLayout 
      android:layout_width="fill_parent" 
      android:layout_height="match_parent"> 

      <LinearLayout 
       android:id="@+id/linearLayout_gridtableLayout" 
       android:layout_width="900dp" 
       android:layout_height="match_parent" 
       android:orientation="horizontal"> 

       <GridView 
        android:id="@+id/gridView1" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:layout_margin="4dp" 
        android:columnWidth="100dp" 
        android:gravity="center" 
        android:numColumns="9" 
        android:horizontalSpacing="1dp" 
        android:scrollbarAlwaysDrawHorizontalTrack="true" 
        android:scrollbarAlwaysDrawVerticalTrack="true" 
        android:scrollbars="horizontal" 
        android:stretchMode="none" 
        android:verticalSpacing="1dp"> 

       </GridView> 


      </LinearLayout> 
     </FrameLayout> 
    </HorizontalScrollView> 
+0

Io uso la struttura nidificata e l'adattatore aggiunto come dice il documento, ma solo 3 immagini appaiono l'una sotto l'altra e drig non è scorrevole, lo sai perché? https://developer.android.com/guide/topics/ui/layout/gridview.html –

+0

non funziona ... update plz –

-1

Ecco qualche soluzione (Aggiornato):

Includere questo per la vostra attività xml:

<HorizontalScrollView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:scrollbars="none" 
    android:id="@+id/title_horizontalScrollView" 
    android:layout_margin="1dp" 
    android:fillViewport="false"> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     > 

     <GridView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/horizontal_gridView" 
      android:layout_gravity="center"/> 
    </LinearLayout> 
</HorizontalScrollView> 

generano l'articolo griglia personalizzata nella cartella di layout:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:id="@+id/grid_item" 
    android:layout_width="120dp" 
    android:layout_height="30dp" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" 
    android:gravity="center" 
    android:text="here is the text" 
    android:textAlignment="center" 
    android:textSize="15sp" 
    android:textStyle="bold" /> 
</RelativeLayout> 

di quanto è necessario config esso dal codice (perché è un modo migliore per questo) e anche sentire con adattatore:

public class MainActivity extends AppCompatActivity { 

public GridView gridView; 

String[] models = {"Some text here", "and here" ,"and also here","one here","hello","here too"," and here"}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    gridView = (GridView)findViewById(R.id.horizontal_gridView); 
    gridViewSetting(); 
} 


private void gridViewSetting() { 

    // this is size of your list with data 
    int size = models.length; 
    // Calculated single Item Layout Width for each grid element .. for me it was ~100dp 
    int width = 100 ; 

    // than just calculate sizes for layout params and use it 
    DisplayMetrics dm = new DisplayMetrics(); 
    this.getWindowManager().getDefaultDisplay().getMetrics(dm); 
    float density = dm.density; 

    int totalWidth = (int) (width * size * density); 
    int singleItemWidth = (int) (width * density); 

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
      totalWidth, LinearLayout.LayoutParams.MATCH_PARENT); 

    gridView.setLayoutParams(params); 
    gridView.setColumnWidth(singleItemWidth); 
    gridView.setHorizontalSpacing(2); 
    gridView.setStretchMode(GridView.STRETCH_SPACING); 
    gridView.setNumColumns(size); 
    GridAdapter adapter = new GridAdapter(MainActivity.this, models); 
    gridView.setAdapter(adapter); 

} } 

questo è esempio di adattatore personalizzato:

public class GridAdapter extends BaseAdapter { 

private String[] modelsName; 

private Context context; 

private LayoutInflater inflater; 

public GridAdapter(Context con, String[] names) { 
    this.modelsName = names; 
    this.context = con; 
} 

@Override 
public int getCount() { 
    return modelsName.length; 
} 

@Override 
public Object getItem(int i) { 
    return modelsName[i]; 
} 

@Override 
public long getItemId(int i) { 
    return i; 
} 

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 

    View gridView = view; 

    if(view == null) { 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     gridView = inflater.inflate(R.layout.custom_layout, null); 
    } 

    TextView text = (TextView) gridView.findViewById(R.id.grid_item); 

    text.setText(modelsName[i]); 

    return gridView; 
} } 

ho preso questa soluzione da here.