首页 > 系统 > Android > 正文

Android GridView实现横向列表水平滚动

2019-12-12 00:42:20
字体:
来源:转载
供稿:网友

本文实例为大家分享了Android GridView实现横向列表水平滚动的具体代码,供大家参考,具体内容如下

有时候根据项目需要,使用可横向滑动的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 extends View> T get(View view, int id) {  SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();  if (viewHolder == null) {   viewHolder = new SparseArray<View>();   view.setTag(viewHolder);  }  View childView = viewHolder.get(id);  if (childView == null) {   childView = view.findViewById(id);   viewHolder.put(id, childView);  }  return (T) childView; }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表