Botões um ao lado do outro

Estou te enviando a ideia do ButtonAdapter (na verdade, quase que a implementação inteira que você precisa…)

No seu main.xml, deve conter uma GridView, onde receberá o conteúdo desse Adapter, através do:

GridView gridView = (GridView) findViewById(R.id.gridView); gridView.setAdapter(new ButtonAdapter(this));

Espero que ajude…

Esse buttonAdapter eu copio para o projeto, certo?

Na classe Principal eu coloco isso:

GridView gridView = (GridView) findViewById(R.id.gridView);  
gridView.setAdapter(new ButtonAdapter(this));  

Isso, você copia e precisa de todos os imports da classe, que eu não implementei (fiz esta classe rapidex num bloco de notas :P)…

E sim, este código você coloca na sua classe principal…

Agora para adaptar da sua forma é facil :]

Ta dando erro aqui:

package br.me.gridview;

import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;

public class ButtonAdapter extends BaseAdapter {

	  private Context context; // context ta sublinhado de vermelho
	  private static final String[] buttonNames = {"Cadastro", "Consulta", "Manutenção", "About", "Config"};

	  public ButtonAdapter(Context context) {  // context ta sublinhado de vermelho
	    this.context = context; // context ta sublinhado de vermelho
	  }

	  @Override
	  public int getCount() {
	    return 5;
	  }

	  @Override
	  public Object getItem(int pos) {
	    return null;
	  }

	  @Override
	  public long getItemId(int pos) {
	    return 0;
	  }

	  @Override
	  public View getView(int position, View convertView, ViewGroup parent) {
	    Button button;
	    if (convertView == null) {
	      button = new Button(context); // context ta sublinhado de vermelho
	      button.setText(buttonNames[position]);
	    } else {
	      button = (Button) convertView;
	    }
	    return button;
	  }

	}

Minha classe Principal ta assim:

package br.me.gridview;

import android.app.Activity;
import android.os.Bundle;

public class GridViewActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

Importe o Context.

Ok, e como fica a classe principal?

Embaixo da linha do setContentView, coloque as duas linhas de código que eu te passei… Não esqueça de dar os imports necessários!

A classe Principal fica assim:

package br.me.gridview;

import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;

public class GridViewActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        GridView gridView = (GridView) findViewById(R.id.gridView);  // o id ta sublinado de vermelho
        gridView.setAdapter(new ButtonAdapter(this));  
    }
}

Tá como ficaria o main.xml com o GridView:

Assim?

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:columnWidth="90dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>

Isso, apenas deixe a linha do android:id dessa forma:

Ficou assim:

Principal

package br.me.gridview;

import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;

public class GridViewActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        GridView gridView = (GridView) findViewById(R.id.gridView);  
        gridView.setAdapter(new ButtonAdapter(this));  
    }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridView"      
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:columnWidth="90dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>

Classe ButtonAdapter

package br.me.gridview;

import android.content.Context; 
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;

public class ButtonAdapter extends BaseAdapter {

	  private Context context;
	  private static final String[] buttonNames = {"Cadastro", "Consulta", "Manutenção", "About", "Config"};

	  public ButtonAdapter(Context context) {
	    this.context = context;
	  }

	  @Override
	  public int getCount() {
	    return 5;
	  }

	  @Override
	  public Object getItem(int pos) {
	    return null;
	  }

	  @Override
	  public long getItemId(int pos) {
	    return 0;
	  }

	  @Override
	  public View getView(int position, View convertView, ViewGroup parent) {
	    Button button;
	    if (convertView == null) {
	      button = new Button(context);
	      button.setText(buttonNames[position]);
	    } else {
	      button = (Button) convertView;
	    }
	    return button;
	  }

	}

Agora, como colocaria os botões com seus nomes?

Na classe principal coloco isso, onde?

private String[] buttonNames = {"Cadastro de Cliente", "Consulta de Cliente", "Manutenção", "About", "Configurações"}; 
button.setText(buttonNames[position]); 

Como que faço os botões com seus nomes?

Bom, se você sabe quais são os nomes, e eles serão estáticos, ou seja, não irá crescer ou diminuir, então apenas mude a variável buttonNames do ButtonAdapter conforme você quiser… lembrando de modificar o retorno do método getCount para a quantidade de botões que você deseja.

Não entendi essa parte. Os botões vão ser estáticos, mas pode ser que aumente a quantidade dos mesmos.

Bom, então modifique a classe ButtonAdapter assim:

[code]public class ButtonAdapter extends BaseAdapter {
private String[] buttonNames;
private Context context;

public ButtonAdapter(Context context, String[] buttonNames) {
this.context = context;
this.buttonNames = buttonNames;
}

@Override
public int getCount() {
return buttonNames.length;
}

// Demais códigos…

}[/code]

Agora, na classe Principal, quando usar o Adapter, você determinará quais os nomes dos botões, automaticamente você estará determinando o tamanho da GridView.

Aí sempre que for utilizar o ButtonAdapter, você determina a sua array de Strings com o texto de todos os botões…

Colei essa linha no principal;

package br.me.gridview;

import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;

public class GridViewActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        GridView gridView = (GridView) findViewById(R.id.gridView);  
        gridView.setAdapter(new ButtonAdapter(this, new String[] {"Item 1", "Item 2", "Item 3"}));   // ta sublinha de vermelho: new ButtonAdapter(this, new String[] {"Item 1", "Item 2", "Item 3"}));
    }
}

Você anda esquecendo do import, se é uma classe diferente, deve ser importada… se tiver usando o Eclipse, aperte CTRL + SHIFT + O para fazer o import automático…

Estou usando eclipse, mas qual import está faltando. Apertei CTRL+SHIF+O e não fez nada.

The constructor ButtonAdapter(GridViewActivity, String[]) is undefined

Da classe ButtonAdapter que você acabou de criar, importe-a.

Rapaz, rs, deu um branco, como é mesmo:

import…

import <caminho_da_classe_ButtonAdapter>.ButtonAdapter;