转载自第一代码的原创文章http://www.diyidaima.com/article/detail/F6VDTnie

有时候根据项目需要,使用可横向滑动的GridView。仅以该文记录一下,毕竟没什么技术含量。
1.主界面布局代码:activity_main.xml。设置android:numColumns=”auto_fit”是因为可以不定项的添加子项。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical">    <HorizontalScrollView        android:layout_width="fill_parent"        android:layout_height="wrap_content">        <LinearLayout            android:layout_width="wrap_content"            android:layout_height="fill_parent">            <view.gridviewdemo.AblGridView                android:id="@+id/id_gridview_home"                android:layout_width="fill_parent"                android:layout_height="fill_parent"                android:gravity="center"                android:numColumns="auto_fit"                android:scrollbars="none"                android:stretchMode="spacingWidthUniform"/>        LinearLayout>    HorizontalScrollView>LinearLayout>

2.主界面GridView列表子项布局文件:home_gridview_item.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="wrap_content"    android:layout_gravity="center"    android:layout_margin="0dp"    android:background="#ffffff"    android:orientation="vertical">    <ImageView        android:id="@+id/id_iv_item"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center_horizontal"        android:layout_marginTop="10dp"        android:gravity="center" />    <TextView        android:id="@+id/id_tv_item"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center_horizontal"        android:layout_marginTop="5dp"        android:gravity="center"        android:paddingBottom="10dp"        android:text="标题文字"        android:textSize="12sp" />LinearLayout>

3.java实现代码:MainActivity.java

import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.DisplayMetrics;import android.widget.GridView;import android.widget.LinearLayout;public class MainActivity extends AppCompatActivity {    AblGridView id_gridview_home;    private int[] imgs = {R.mipmap.index1_nav_xc, R.mipmap.index1_nav_xc,            R.mipmap.index1_nav_xc, R.mipmap.index1_nav_xc, R.mipmap.index1_nav_xc};    private String[] titles = new String[]{"子项1", "子项2","子项3","子项4", "子项5"};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        id_gridview_home= (AblGridView) findViewById(R.id.id_gridview_home);        setGridView();    }    /**设置GirdView参数,绑定数据*/    private void setGridView() {        int size = imgs.length;        int length = 100;        DisplayMetrics dm = new DisplayMetrics();        getWindowManager().getDefaultDisplay().getMetrics(dm);        float density = dm.density;        int gridviewWidth = (int) (size * (length + 4) * density);        int itemWidth = (int) (length * density);        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(                gridviewWidth, LinearLayout.LayoutParams.FILL_PARENT);        id_gridview_home.setLayoutParams(params); // 设置GirdView布局参数,横向布局的关键        id_gridview_home.setColumnWidth(itemWidth); // 设置列表项宽        id_gridview_home.setHorizontalSpacing(5); // 设置列表项水平间距        id_gridview_home.setStretchMode(GridView.NO_STRETCH);        id_gridview_home.setNumColumns(size); // 设置列数量=列表集合数        AblGridViewBaseAdapter adapter = new AblGridViewBaseAdapter(this,imgs,titles);        id_gridview_home.setAdapter(adapter);    }}

4.自定义控件:AblGridView

import android.content.Context;import android.util.AttributeSet;import android.widget.GridView;/** * 继承GridView控件,为了更友好的显示 * 解决在scrollview中只显示第一行数据的问题 */public class AblGridView extends GridView {    public AblGridView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public AblGridView(Context context) {        super(context);    }    public AblGridView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }    @Override    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,                MeasureSpec.AT_MOST);        super.onMeasure(widthMeasureSpec, expandSpec);    }}

5.重写适配器:AblGridViewBaseAdapter

import android.content.Context;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;/** * 重写适配器 */public class AblGridViewBaseAdapter extends BaseAdapter {    private Context mContext;    private String[] Title;//显示标题数组    private int[] Imgs;//显示图标数组    public AblGridViewBaseAdapter(Context mContext,int[] imgs ,String[] titles) {        super();        this.mContext = mContext;        Title = titles;        Imgs = imgs;    }    @Override    public int getCount() {        return Title.length;    }    @Override    public Object getItem(int position) {        return position;    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        convertView = loadHomeHyOrYs(position, convertView, parent);        return convertView;    }    /**     * 加载会员或医生的功能列表     */    public View loadHomeHyOrYs(int position, View convertView, ViewGroup parent) {        if (convertView == null) {            convertView = LayoutInflater.from(mContext).inflate(                    R.layout.home_gridview_item, parent, false);        }        TextView tv = get(convertView, R.id.id_tv_item);        ImageView iv = get(convertView, R.id.id_iv_item);        iv.setBackgroundResource(Imgs[position]);        tv.setText(Title[position]);        return convertView;    }    public  T get(View view, int id) {        SparseArray viewHolder = (SparseArray) view.getTag();        if (viewHolder == null) {            viewHolder = new SparseArray();            view.setTag(viewHolder);        }        View childView = viewHolder.get(id);        if (childView == null) {            childView = view.findViewById(id);            viewHolder.put(id, childView);        }        return (T) childView;    }}

更多相关文章

  1. 华为手机虚拟键盘的坑
  2. Android实现蒙板效果
  3. Android实现加载广告图片和倒计时的开屏布局
  4. Android杂识
  5. Android(安卓)intent flag 详解
  6. android开发真机调试
  7. Android(安卓)属性动画(Property Animation)完全解析 (下)
  8. Android(安卓)之Toast
  9. Android(安卓)OpenGL ES 开发(二): OpenGL ES 环境搭建

随机推荐

  1. Android(安卓)studio 3.1 集成ButterKnif
  2. Android(安卓)cocos2d-x开发(三)之创建Andr
  3. Flutter常用数据类型笔记
  4. android之通过SurfaceView以及SurfaceHol
  5. android自定义camera以及uri和文件路径之
  6. Android(安卓)gradle 动态添加模块依赖
  7. Android(安卓)Studio 自定义设置注释模板
  8. 一道面试题引发的对android中context的研
  9. AIR Native Extension on Android(安卓)-
  10. Android实用代码七段(一)