2013-04-10 7 views
7

私は動的グリッドビューを持っています。内容が異なることを意味します。したがって、アイテムの数が増えると、垂直スクロールが行われます。私はそれを水平スクロールにしたい。グリッドビューを水平に、アンドロイドで垂直にスクロールさせる方法はありますか?

解決策をご提案ください。

+0

http://stackoverflow.com/questions/5725745/horizo​​ntal-scrolling-grid-view – Nermeen

+0

私はこれを試しました。しかし、それはグリッド内の固定コンテンツを求めていた。 –

答えて

0

HorizontalScrollViewに入れてみてください。固定の高さをHorizontalScrollViewの中のGridViewに設定しようとする場合があります。

次に、コンテンツに基づいてGridViewの列数を動的に計算し、setNumColumns(int)メソッドを使用して設定することができます。

+0

素晴らしいアイデア!間違いなくそれを試みます。 – marienke

+3

動作しません。すべてのアイテムをビューポートにクランチしようとしましたが、水平スクロールは表示されません。 – midnight

+0

'Horizo​​ntalScrollView'内の' GridView'に固定幅を設定しようとするかもしれません。 – jaibatrik

1

サードパーティのライブラリtwo-way grid viewを使用できます。それは、水平スクロールのための素晴らしい作品か、それがこれを見ていのためにあなたは私のロジックを使用することができます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

入れ子構造を使用し、docのようにアダプタを追加しましたが、3画像のみが表示され、drigはスクロールできません。どうして? https://developer.android.com/guide/topics/ui/layout/gridview.html –

+0

が動作していません...アップデートplz –

-1

をいくつかの解決策(更新)です。

は、あなたの活動の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> 

レイアウトフォルダにカスタムグリッド項目を作成します。 あなたが(それはこのためのより良い方法であるため)コードからそれを設定への必要以上

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

と、アダプタとそれを感じる:

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

} } 

これはカスタムアダプターの例です。

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

here

関連する問題