android - 在 1 行和多列中显示带有水平滚动条的 GridView 或画廊的图像和文本

标签 android android-gridview android-gridlayout

我正在开发一个需要在水平滚动条中将图像和文本组合在一起的应用程序。 我已经尝试了一些东西,但我无法得到这个,任何人都可以指导我与这些人一起。

这是我所做的,

主.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
   <HorizontalScrollView 
   android:id="@+id/horizontalScrollView1" 
   android:layout_width="fill_parent" 
   android:layout_height="wrap_content"
   android:fillViewport="true"
   android:scrollbars="horizontal" > 
    <GridView 
        android:layout_height="wrap_content" 
        android:id="@+id/gridView1" 
        android:layout_width="wrap_content" 
        android:horizontalSpacing="10dp"
        android:stretchMode="columnWidth"
        android:scrollbars="horizontal"
        android:verticalSpacing="10dp">
    </GridView>
    </HorizontalScrollView>
</LinearLayout>

gridview_row.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout     
    android:id="@+id/relativeLayout1"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@drawable/border"
    android:padding="5dp">

    <ImageView 
        android:layout_height="64dp" 
        android:id="@+id/imageView1" 
        android:layout_width="64dp" 
        android:src="@drawable/icon" 
        android:layout_alignParentTop="true" 
        android:layout_centerHorizontal="true">
    </ImageView>

    <TextView 
        android:text="TextView" 
        android:layout_height="wrap_content"
        android:id="@+id/textView1" 
        android:layout_width="wrap_content"
        android:layout_below="@+id/imageView1" 
        android:layout_marginTop="2dp"
        android:layout_centerHorizontal="true"
        android:textSize="18sp"></TextView>


</RelativeLayout>

GridviewExampleActivity.java

package com.paresh.gridviewexample;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;

public class GridViewExampleActivity extends Activity {
    /** Called when the activity is first created. */

    private GridviewAdapter mAdapter;
    private ArrayList<String> listCountry;
    private ArrayList<Integer> listFlag;

    private GridView gridView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        prepareList();

        // prepared arraylist and passed it to the Adapter class
        mAdapter = new GridviewAdapter(this,listCountry, listFlag);

        // Set custom adapter to gridview
        gridView = (GridView) findViewById(R.id.gridView1);
        gridView.setAdapter(mAdapter);

        // Implement On Item click listener
        gridView.setOnItemClickListener(new OnItemClickListener() 
        {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long arg3) {
                Toast.makeText(GridViewExampleActivity.this, mAdapter.getItem(position), Toast.LENGTH_SHORT).show();
            }
        });

    }

    public void prepareList()
    {
          listCountry = new ArrayList<String>();

          listCountry.add("india");
          listCountry.add("Brazil");
          listCountry.add("Canada");
          listCountry.add("China");
          listCountry.add("France");
          listCountry.add("Germany");
          listCountry.add("Iran");
          listCountry.add("Italy");
          listCountry.add("Japan");
          listCountry.add("Korea");
          listCountry.add("Mexico");  
          listCountry.add("Netherlands");
          listCountry.add("Portugal");  
          listCountry.add("Russia");
          listCountry.add("Saudi Arabia");  
          listCountry.add("Spain");
          listCountry.add("Turkey");
          listCountry.add("United Kingdom");
          listCountry.add("United States");

          listFlag = new ArrayList<Integer>();
          listFlag.add(R.drawable.india);
          listFlag.add(R.drawable.brazil);
          listFlag.add(R.drawable.canada);
          listFlag.add(R.drawable.china);
          listFlag.add(R.drawable.france);
          listFlag.add(R.drawable.germany);
          listFlag.add(R.drawable.iran);
          listFlag.add(R.drawable.italy);
          listFlag.add(R.drawable.japan);
          listFlag.add(R.drawable.korea);
          listFlag.add(R.drawable.mexico);
          listFlag.add(R.drawable.netherlands);
          listFlag.add(R.drawable.portugal);
          listFlag.add(R.drawable.russia);
          listFlag.add(R.drawable.saudi_arabia);
          listFlag.add(R.drawable.spain);
          listFlag.add(R.drawable.turkey);
          listFlag.add(R.drawable.united_kingdom);
          listFlag.add(R.drawable.united_states);
    }

}


GridviewAdapter.java

package com.paresh.gridviewexample;

import java.util.ArrayList;

import android.app.Activity;
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 GridviewAdapter extends BaseAdapter
{
    private ArrayList<String> listCountry;
    private ArrayList<Integer> listFlag;
    private Activity activity;

    public GridviewAdapter(Activity activity,ArrayList<String> listCountry, ArrayList<Integer> listFlag) {
        super();
        this.listCountry = listCountry;
        this.listFlag = listFlag;
        this.activity = activity;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return listCountry.size();
    }

    @Override
    public String getItem(int position) {
        // TODO Auto-generated method stub
        return listCountry.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    public static class ViewHolder
    {
        public ImageView imgViewFlag;
        public TextView txtViewTitle;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder view;
        LayoutInflater inflator = activity.getLayoutInflater();

        if(convertView==null)
        {
            view = new ViewHolder();
            convertView = inflator.inflate(R.layout.gridview_row, null);

            view.txtViewTitle = (TextView) convertView.findViewById(R.id.textView1);
            view.imgViewFlag = (ImageView) convertView.findViewById(R.id.imageView1);

            convertView.setTag(view);
        }
        else
        {
            view = (ViewHolder) convertView.getTag();
        }

        view.txtViewTitle.setText(listCountry.get(position));
        view.imgViewFlag.setImageResource(listFlag.get(position));

        return convertView;
    }

}

我的输出应该是

------------       ----------              ------------     ----
Image Image Image Image Image Image Image Image Image Image Image 

Text  Text  Text  Text  Text  Text  Text  Text  Text  Text  Text 
------------       ----------              ------------         --

请帮帮我

最佳答案

您好,请看一下用于 ListView 和 Gridview 的 CustomArrayAdapter,尤其是第 10 点 this Tutoiral在那里您将了解如何自定义您的 GridView/ListView(以相同方式处理)

This might also help

如果您对 hotrizontal 方式有疑问,请尝试这个项目:https://github.com/jess-anders/two-way-gridview

关于android - 在 1 行和多列中显示带有水平滚动条的 GridView 或画廊的图像和文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19179785/

相关文章:

android - RecyclerView 与 GridLayoutManager

java - 如何使用Java在Android GridLayout中设置间距?

android - Amazon App Store IAP 实现抛出 CommandServiceClient : CommandServiceException at runtime

不滚动的Android ListView?

android - 无法将滚动添加到其中包含 gridview 的 View

android - 将 GridView 调整为所有屏幕尺寸

android - Android 中的 GridView 和 GridLayout

Android 可扩展 ListView : how to detect when the scroll hits the bottom/end of list

java - Android 中 Thread.sleep 方法的替代方法

android - View (不是 fragment )的 ViewPager 作为 fragment 中 gridview(Etsy 的 StaggeredGridView)的标题