Android网格布局实现--GridView
想要实现这个功能,可以使用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<SearchNearItem> itemList = new ArrayList<SearchNearItem>(); 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; } }