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