效果图:
xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <HorizontalScrollView android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <GridView android:id="@+id/gridView1" android:layout_width="match_parent" android:layout_height="match_parent" > </GridView> </LinearLayout> </HorizontalScrollView> </LinearLayout>
Java:
public class MainActivity extends Activity { HorizontalScrollView horizontalScrollView; GridView gridView; DisplayMetrics dm; private int NUM = 4; // 每行显示个数 private int hSpacing = 20;// 水平间距 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); horizontalScrollView = (HorizontalScrollView) findViewById(R.id.scrollView); gridView = (GridView) findViewById(R.id.gridView1); horizontalScrollView.setHorizontalScrollBarEnabled(false);// 隐藏滚动条 getScreenDen(); setValue(); } private void setValue() { MyGridViewAdapter adapter = new MyGridViewAdapter(this, 21); int count = adapter.getCount(); int columns = (count % 2 == 0) ? count / 2 : count / 2 + 1; gridView.setAdapter(adapter); LayoutParams params = new LayoutParams(columns * dm.widthPixels / NUM, LayoutParams.WRAP_CONTENT); gridView.setLayoutParams(params); gridView.setColumnWidth(dm.widthPixels / NUM); // gridView.setHorizontalSpacing(hSpacing); gridView.setStretchMode(GridView.NO_STRETCH); if (count <= 3) { gridView.setNumColumns(count); } else { gridView.setNumColumns(columns); } } private void getScreenDen() { dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
源码地址:点击这里