2013-04-10 12 views
7

Mam dynamiczny widok siatki. Oznacza, że ​​jego zawartość jest różna. Tak więc, jeśli liczba przedmiotów rośnie, powoduje to pionowe przewijanie. Chcę zrobić to jako poziome przewijanie.Jak zrobić widok siatki przewijać poziomo nie pionowo w systemie Android?

Proszę zasugerować rozwiązanie tego problemu.

+0

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

+0

Próbowałem tego. Ale prosił o stałą zawartość w siatce. –

Odpowiedz

0

Możesz spróbować umieścić GridView w HorizontalScrollView. Możesz spróbować ustawić stałą wysokość na GridView wewnątrz HorizontalScrollView.

Następnie można dynamicznie obliczyć liczbę kolumn GridView na podstawie treści i użyć metody setNumColumns(int), aby ją ustawić.

+0

Świetny pomysł! Na pewno tego spróbuję. – marienke

+3

To nie działa. Po prostu próbuje ciąć wszystkie elementy w oknie roboczym, ale nie pojawia się poziome zwoje – midnight

+0

Możesz spróbować ustawić stałą szerokość na 'GridView' wewnątrz' HorizontalScrollView'. – jaibatrik

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

Używam twojej zagnieżdżonej struktury i dodanego adaptera jak mówi doc, ale tylko 3 obraz pojawia się pod sobą, a drig nie jest przewijany, czy wiesz? czemu? https://developer.android.com/guide/topics/ui/layout/gridview.html –

+0

nie działa ... zaktualizuj plz –

-1

Oto rozwiązanie (Aktualizacja):

włączenie tej działalności do 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> 

Tworzenie niestandardowego elementu sieci w folderze układ:

<?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> 

niż trzeba config go z kodu (ponieważ jest to lepszy sposób na to) a także poczuć go z adaptera:

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); 

} } 

jest przykładem niestandardowego adaptera:

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; 
} } 

wziąłem to rozwiązanie z here.

Powiązane problemy