2012-06-18 1 views
2

В моем приложении я пытаюсь получить информацию о наборе пользователей из веб-сервиса. Затем я хочу отобразить Изображение каждого пользователя вместе с их именами в GridLayout. Я раньше не использовал GridLayout и, следовательно, пытался пройти через обучающие программы, доступные в Интернете, но большинство из них касается только изображений. Мне нужно отобразить как изображение, так и текст в сетке.Android Custom GridLayout с текстом + изображение

Как настроить пользовательский GridLayout для отображения текста вместе с изображениями?

ответ

5

Попробуйте это:

public class GridActivity extends Activity implements AdapterView.OnItemClickListener { 
/** Called when the activity is first created. */ 

Integer[] imageIDs = { 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 

    }; 

String[] titles = { 
     "First", 
     "Second", 
     "Third", 
     "Fourth", 
     "Fifth", 
     "First", 
     "Second", 
     "Third", 
     "Fourth", 
     "Fifth", 
     "First", 
     "Second", 
     "Third", 
     "Fourth", 
     "Fifth", 
     "First", 
     "Second", 
     "Third", 
     "Fourth", 
     "Fifth", 
     "First", 
     "Second", 
     "Third", 
     "Fourth", 
     "Fifth", 
     "First", 
     "Second", 
     "Third", 
     "Fourth", 
     "Fifth", 

}; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    GridView gridView = (GridView) findViewById(R.id.grid); 
    gridView.setAdapter(new ImageAdapter(this)); 


} 

public class ImageAdapter extends BaseAdapter 
{ 
    private Context context; 

    public ImageAdapter(Context c) 
    { 
     context = c; 
    } 

    //---returns the number of images--- 
    public int getCount() { 
     return imageIDs.length; 
    } 

    //---returns the ID of an item--- 
    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    //---returns an ImageView view--- 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     ImageView icon; 
    icon = new ImageView(context); 

    LayoutInflater inflater = (LayoutInflater)    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View row=inflater.inflate(R.layout.row, parent, false); 
    TextView label=(TextView)row.findViewById(R.id.image_name); 
    label.setText(titles[position]); 
    icon=(ImageView)row.findViewById(R.id.album_image); 

    icon.setImageResource(imageIDs[position]); 

    return row; 
    } 

} 

@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
     long arg3) { 

    // TODO Auto-generated method stub 

} 
    } 

main.xml

<?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" > 

    <GridView 
    android:id="@+id/grid" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@+id/lay" 
    android:columnWidth="100px" 
    android:horizontalSpacing="5dip" 
    android:numColumns="auto_fit" 
    android:scrollbars="horizontal" 

    android:stretchMode="columnWidth" 
    android:verticalSpacing="35px" /> 
    </LinearLayout> 

Row.xml

<?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" > 


    <ImageView 
    android:id = "@+id/album_image" 
    android:adjustViewBounds="true" 
    android:layout_width = "fill_parent"    
    android:layout_height="wrap_content" 
    /> 
    <TextView 
    android:id = "@+id/image_name" 
    android:layout_width = "fill_parent"    
    android:layout_height="wrap_content" 
    android:gravity="center" 
    /> 
    </LinearLayout> 
+0

row.findViewById (R.id ....) Не могли бы вы объяснить эту часть? Что такое «строка» в этом случае? Является ли это XML, который я должен определить отдельно? – Swayam

+1

Ответ не полностью покрывает вопрос как ответ, рассматриваемый GridLayout, а не GridView. –

1

Вот очень хороший пример для GridView с ImageView и TextView.

http://mytelcoit.com/2010/02/programming-android-create-icon-with-text-using-gridview-and-layout-inflater/

Просто создайте XML-файл с ImageView и TextView, как это,

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/widget44" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:layout_x="201px" 
android:layout_y="165px" 
android:gravity="center_horizontal"> 
<ImageView 
android:id="@+id/icon_image" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
</ImageView> 
<TextView 
android:id="@+id/icon_text" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="TextView" 
android:gravity="center_horizontal" 
android:textColorHighlight="#656565"> 
</TextView> 
</LinearLayout> 

И затем использовать пользовательский адаптер для его заполнения.

@Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      View v; 
      if(convertView==null){ 
       LayoutInflater li = getLayoutInflater(); 
       v = li.inflate(R.layout.icon, null); 
       TextView tv = (TextView)v.findViewById(R.id.icon_text); 
       tv.setText("Profile "+position); 
       ImageView iv = (ImageView)v.findViewById(R.id.icon_image); 
       iv.setImageResource(R.drawable.icon); 

      } 
      else 
      { 
       v = convertView; 
      } 
      return v; 
     } 
+0

как я связать XML, содержащий LinearLayout (с Изображение и текст) с помощью t он код Java? – Swayam

+0

android: id = "@ + id/widget44" Где это будет использоваться в Java-коде? – Swayam