Android网格布局实现--GridView_第1张图片 想要实现这个功能,可以使用recyclerview,可以使用GridView。先说下使用GridView实现吧。 布局:

<GridView    android:id="@+id/name_search_gridView"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_marginLeft="@dimen/name_search_gridview_margin_left"    android:layout_marginRight="@dimen/name_search_gridview_margin_right"    android:background="@null"    android:focusable="true"    android:listSelector="@drawable/com_bg_item_selector"    android:numColumns="4"    android:overScrollMode="never"    android:scrollbars="none" />
java代码实现:

mAdapter = new SearchNearGridViewAdapter(getContext());
mGridView.setAdapter(mAdapter);

mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {        @Override        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {            SearchNearItem item = mAdapter.getItem(position);                  }    });}
-----------------------

public class SearchNearItem {    public int type = 0;    public String name = "";    public String id = "";    public String icon = "";    public SearchNearItem(int type, String name, String id) {        this(type, name, id, "");    }    public SearchNearItem(int type, String name, String id, String icon) {        this.type = type;        this.name = name;        this.id = id;        this.icon = icon;    }}
------------------------------

   
SearchNearGridViewAdapter.java
public class SearchNearGridViewAdapter extends BaseAdapter {    private static final int VIEW_TYPE_COUNT = 2;    private List itemList = new ArrayList();    private Context mContext;    public SearchNearGridViewAdapter(Context context) {        this.mContext = context;        initData();    }    private void initData() {        String jsonStr = FileUtil.getStringFromAssertFile(mContext, "name_search_item.json");        try {            JSONArray array = new JSONArray(jsonStr);            for (int i = 0, len = array.length(); i < len; i++) {                JSONObject json = array.getJSONObject(i);                int type = json.getInt("type");                if (type == 1) {                    itemList.add(new SearchNearItem(type, json.getString("name"), json.getString("id"), json.getString("icon")));                } else {                    itemList.add(new SearchNearItem(type, json.getString("name"), json.getString("id")));                }            }        } catch (Exception e) {            e.printStackTrace();        }    }    @Override    public int getCount() {        return null != itemList ? itemList.size() : 0;    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public SearchNearItem getItem(int position) {        return itemList.get(position);    }    @Override    public int getViewTypeCount() {        return VIEW_TYPE_COUNT;    }    @Override    public int getItemViewType(int position) {        return getItem(position).type == 1 ? 0 : 1;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder viewHolder;        if (convertView == null) {            int resource;            if (getItemViewType(position) == 0) {                resource = R.layout.name_search_gridview_item1;            } else {                resource = R.layout.name_search_gridview_item2;            }            convertView = LayoutInflater.from(mContext).inflate(resource, parent, false);            viewHolder = new ViewHolder();            viewHolder.textView = (TextView) convertView.findViewById(R.id.name_search_gridview_item_txt);            convertView.setTag(viewHolder);        } else {            viewHolder = (ViewHolder) convertView.getTag();        }        final SearchNearItem item = getItem(position);        viewHolder.textView.setText(item.name);        Resources resources = mContext.getResources();        if (getItemViewType(position) == 0) {            int id = resources.getIdentifier(mContext.getPackageName() + ":drawable/" + item.icon, null, null);            if (id > 0) {                Drawable top;                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {                    top = resources.getDrawable(id, null);                } else {                    top = resources.getDrawable(id);                }                viewHolder.textView.setCompoundDrawablesWithIntrinsicBounds(null, top, null, null);            }        } else {            viewHolder.textView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);        }        switch (item.type) {            case 1:                viewHolder.textView.setTextColor(resources.getColor(R.color.cl_text_a5_content));                break;            case 2:                viewHolder.textView.setTextColor(resources.getColor(R.color.cl_text_a1_content));                break;            case 3:                viewHolder.textView.setTextColor(resources.getColor(R.color.cl_text_a3_content));                break;            default:                break;        }        return convertView;    }    private class ViewHolder {        TextView textView;    }}



更多相关文章

  1. 可动态布局的Android抽屉之完整篇
  2. 【从头学android】第二个程序同一个Activity中,切换布局时监听器
  3. Android布局总结一:GridLayout布局(网格布局)
  4. android UI学习 -- 设置界面的布局(包括style的使用,selector的
  5. 【Android】界面布局之TableLayout(表格布局)
  6. Android布局编写示例【慢慢更新】
  7. Android 布局优化之include与merge
  8. 线性布局(LinearLayout)下layout_weight用法分析
  9. Android 布局(LinearLayout\TableLayout\RelativeLayout\Absol

随机推荐

  1. android 获取网络图片缓存(内存—>文件—>
  2. 两分钟搞定android JNI
  3. 【Android(安卓)Training - 05】与其他Ap
  4. Android(安卓)中 Activity的内存泄漏,原因
  5. Android(安卓)Studio错误代码不提示问题
  6. android中实现暗码启动apk【一】
  7. 十年一顾,iOS与Android这样改变了我们
  8. 混合开发H5页面嵌入ios/Android及echarts
  9. Android中的第一个NDK的例子
  10. 10个最佳Android新闻应用模板