在android gridview中水平滚动

我在我的应用程序中有一个网格视图,我需要水平滚动它。我试图改变gridview到gallery.But然后只有一行是可用的,但我需要在网格视图不同的行。所以基本上我需要的是一个gridview可以水平滚动。是否有任何有效的方法来做到这一点?在此先感谢。

问候Anu

嗨,感谢您的reply.i已经尝试使用一个库,并实现一个适配器,在其getView方法中提供了一个多行视图。

我的java文件是:

public class Gridview extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Gallery g = (Gallery) findViewById(R.id.gallery); g.setAdapter(new GridAdapter(this)); g.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { Toast.makeText(Gridview.this, "" + position, Toast.LENGTH_SHORT).show(); } }); } public class GridAdapter extends BaseAdapter { int mGalleryItemBackground; private Context mContext; private Integer[] mImageIds = { R.drawable.icon, R.drawable.icon, R.drawable.icon, R.drawable.icon, R.drawable.icon, R.drawable.icon, R.drawable.icon, }; public GridAdapter(Context c) { mContext = c; TypedArray a = obtainStyledAttributes(R.styleable.HelloGallery); mGalleryItemBackground = a.getResourceId( R.styleable.HelloGallery_android_galleryItemBackground, 0); a.recycle(); } public int getCount() { return mImageIds.length; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { View v; if(convertView==null) { LayoutInflater li = getLayoutInflater(); v = li.inflate(R.layout.icon, null); ImageView iv = (ImageView)v.findViewById(R.id.icon_image); iv.setImageResource(R.drawable.icon); } else { v = convertView; } return v; } } } 

main.xml是:

  <?xml version="1.0" encoding="utf-8"?> <Gallery xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gallery" android:layout_width="fill_parent" android:layout_height="wrap_content"/> 

icon.xml是:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearlayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <ImageView android:id="@+id/icon_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> </ImageView> </LinearLayout> 

我得到的输出是: http : //www.4shared.com/photo/MzUcmzel/device.html

但是这不是我实际需要的。我想在不同的行中的图标。任何帮助表示赞赏。

Solutions Collecting From Web of "在android gridview中水平滚动"

我认为你最好的select是使用一个库,并实现一个在其getView方法中提供多行视图的适配器。 查看Hello Gallery并查看其中的ImageAdapter实现。

例如,您可以使用自定义布局,例如垂直方向的LinearLayout,来代替该示例中的getView返回的ImageView。

您可能会考虑在Horizo​​ntalScrollView中使用TableLayout,但缺点是所有内容都会一次存储在内存中,从而难以扩展到很多项目。 画廊回收视图,并提供一些资源优势。

对于使用Gallery或ListView来说是真的:重新使用视图。 但是如果你的列表不是太长,你可以用ViewFlipper尝试一个TableLayout。 这是可能的选项/解决scheme的总结。

这篇文章可能会帮助你解决你想达到的目标

像书架视图滚动

我已经在这里和这里发布了这个答案,但这些问题是相同的…


从现在开始,Android中有一个很好的解决scheme: Horizo​​ntalGridView 。

1. Gradle依赖

 dependencies { compile 'com.android.support:leanback-v17:23.1.0' } 

2.将其添加到您的布局

your_activity.xml

 <!-- your stuff before... --> <android.support.v17.leanback.widget.HorizontalGridView android:layout_width="wrap_content" android:layout_height="80dp" android:id="@+id/gridView" /> <!-- your stuff after... --> 

3.布局网格元素

为您的网格元素( grid_element.xml )创build一个布局。 我创build了一个简单的只有一个button。

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Button" android:id="@+id/button" /> </LinearLayout> 

4.创build一个适配器

受此链接高度启发: https : //gist.github.com/gabrielemariotti/4c189fb1124df4556058

 public class GridElementAdapter extends RecyclerView.Adapter<GridElementAdapter.SimpleViewHolder>{ private Context context; private List<String> elements; public GridElementAdapter(Context context){ this.context = context; this.elements = new ArrayList<String>(); // Fill dummy list for(int i = 0; i < 40 ; i++){ this.elements.add(i, "Position : " + i); } } public static class SimpleViewHolder extends RecyclerView.ViewHolder { public final Button button; public SimpleViewHolder(View view) { super(view); button = (Button) view.findViewById(R.id.button); } } @Override public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { final View view = LayoutInflater.from(this.context).inflate(R.layout.grid_element, parent, false); return new SimpleViewHolder(view); } @Override public void onBindViewHolder(SimpleViewHolder holder, final int position) { holder.button.setText(elements.get(position)); holder.button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(context, "Position =" + position, Toast.LENGTH_SHORT).show(); } }); } @Override public long getItemId(int position) { return position; } @Override public int getItemCount() { return this.elements.size(); } } 

5.在你的活动中初始化它:

 private HorizontalGridView horizontalGridView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_activity); horizontalGridView = (HorizontalGridView) findViewById(R.id.gridView); GridElementAdapter adapter = new GridElementAdapter(this); horizontalGridView.setAdapter(adapter); } 

尝试将其包装在Horizo​​ntalScrollView中