最终效果:
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:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorAccent"
android:layout_margin="5dp" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp" >
<GridView
android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:numColumns="auto_fit"
android:stretchMode="spacingWidthUniform" >
</GridView>
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
item xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/itemlayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:orientation="vertical" >
<ImageView
android:id="@+id/itemImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@mipmap/ic_launcher" >
</ImageView>
<TextView
android:id="@+id/titleTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Title"
android:textColor="#000000" />
</LinearLayout>
java代码:
public class MainActivity extends AppCompatActivity {
private List<String> dataList;
private GridView gridView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dataList = new ArrayList<>();
// 调用数据初始化
setData();
// 调用设置初始化控件
initControls();
}
/**
* 初始化控件
* */
private void initControls(){
gridView = findViewById(R.id.grid);
// 设置GirdView
setGridView();
}
/**设置数据*/
private void setData() {
dataList.add("111");
dataList.add("222");
dataList.add("333");
dataList.add("444");
dataList.add("555");
dataList.add("666");
dataList.add("777");
dataList.add("888");
dataList.add("999");
}
/**设置GirdView参数,绑定数据*/
private void setGridView() {
final int ITEM_PARAM_WIDTH = 100;// item 宽度参数
final int GRID_VIEW_RIGHTMARGIN = 4;// 最后一个item与GridView右侧距离
// 获取数据集合个数
int size = dataList.size();
//Display屏幕显示的详细信息
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
//int screenWidth = dm.widthPixels;// 当前屏幕宽度
//int screenHeight = dm.heightPixels;// 当前屏幕高度
float density = dm.density;// 屏幕单位
// GridView 整体宽度
int gridViewWidth = (int) (size * (ITEM_PARAM_WIDTH + GRID_VIEW_RIGHTMARGIN) * density);
// item的宽度
int itemWidth = (int) (ITEM_PARAM_WIDTH * density);
// 重新创建布局
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
gridViewWidth, LinearLayout.LayoutParams.MATCH_PARENT);
gridView.setLayoutParams(params); // 设置GirdView布局参数,横向布局的关键
gridView.setColumnWidth(itemWidth); // 设置列表项宽
gridView.setHorizontalSpacing(5); // 设置列表项水平间距
gridView.setStretchMode(GridView.NO_STRETCH);
gridView.setNumColumns(size); // 设置列数量=列表集合数
// GridView设置adapter
GridViewAdapter adapter = new GridViewAdapter(getApplicationContext(),
dataList);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(adapterClick);
}
/**
* GridView 点击事件
* */
AdapterView.OnItemClickListener adapterClick = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
Toast.makeText(getApplicationContext(),dataList.get(position),Toast.LENGTH_SHORT).show();
}
};
}
GridViewAdapter 代码:
public class GridViewAdapter extends BaseAdapter {
Context context;
List<String> list;
public GridViewAdapter(Context _context,List<String> _list) {
this.list = _list;
this.context = _context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position,View convertView,ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null){
convertView = View.inflate(context,R.layout.list_item,null);
viewHolder = new ViewHolder();
viewHolder.itemImage = convertView.findViewById(R.id.itemImage);
viewHolder.titleTV = convertView.findViewById(R.id.titleTV);
convertView.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) convertView.getTag();
}
// 设置图片
viewHolder.itemImage.setImageDrawable(context.getDrawable(R.mipmap.ic_launcher));
// 设置文字
viewHolder.titleTV.setText(list.get(position));
return convertView;
}
static class ViewHolder{
ImageView itemImage;
TextView titleTV;
}
}