Android GridView realizes horizontal scrolling of horizontal list

  • 2021-09-16 08:15:26
  • OfStack

This article example for everyone to share Android GridView horizontal list horizontal scrolling code, for your reference, the specific content is as follows

Sometimes, according to the needs of the project, GridView that can slide horizontally is used. Only record 1 in this article, after all, there is no technical content.

1. Main interface layout code: activity_main. xml. android: numColumns= "auto_fit" is set because subitems can be added indefinitely.


<?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. Main interface GridView list sub-item layout file: 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=" Title text "
  android:textSize="12sp" />
</LinearLayout>

3. java implementation code: 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[]{" Subitem 1", " Subitem 2"," Subitem 3"," Subitem 4", " Subitem 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();
 }

 /** Settings GirdView Parameter, binding data */
 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); //  Settings GirdView Layout parameters , Key to horizontal layout 
  id_gridview_home.setColumnWidth(itemWidth); //  Set list item width 
  id_gridview_home.setHorizontalSpacing(5); //  Set the horizontal spacing of list items 
  id_gridview_home.setStretchMode(GridView.NO_STRETCH);
  id_gridview_home.setNumColumns(size); //  Set the number of columns = Number of list sets 
  AblGridViewBaseAdapter adapter = new AblGridViewBaseAdapter(this,imgs,titles);
  id_gridview_home.setAdapter(adapter);
 }
}

4. Custom control: AblGridView


import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;

/**
 *  Inheritance GridView Control for a more friendly display 
 *  Solve in scrollview Only the number in the 1 Problems with row data 
 */
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. Rewrite adapter: 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;

/**
 *  Rewrite adapter 
 */
public class AblGridViewBaseAdapter extends BaseAdapter {

 private Context mContext;
 private String[] Title;// Display an array of titles 
 private int[] Imgs;// Display an array of icons 

 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;
 }

 /**
  *  Load a list of functions for members or doctors 
  */
 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;
 }

}

Related articles: