terça-feira, 25 de setembro de 2012

quarta-feira, 14 de março de 2012

Criando um Horizontal View Swiping usando ViewPager da API de compatibilidade.

Caso sua aplicação não seja criada diretamente com o ICS(Android 4.x), o primeiro passo é baixar a lib de compatibilidade.

Link para mais informações sobre a lib de compatibilidade, download e configuração:
http://developer.android.com/sdk/compatibility-library.html

Com essa lib em seu projeto, vc tem acesso as classes ViewPager, PagerAdapter, Fragment, entre outras.
Para criar o Horizontal View Swiping, vamos precisar da ViewPager e PagerAdpter.
Primeiro add a tela xml a "tag" do ViewPager:

Galera, a "tag" que eu estou usando para add os fontes no post é fraca, nesse caso aqui ela colocou tudo minusculo, então troquem o nome da tag para android.support.v4.view.ViewPager (com ViewPager) maiusculo
 


Agora vc tem que carregar o ViewPager e o Adapter na sua Activity ou em um Fragment (como vc preferir) e setar o Adapter:
 
AwesomePagerAdapter awesomeAdapter = new AwesomePagerAdapter();
ViewPager awesomePager = (ViewPager) findViewById(R.id.awesomepager);
awesomePager.setAdapter(awesomeAdapter);
Agora vc precisa implementar o PagerAdapter para montar e carregar os dados nas suas telas:
 
class AwesomePagerAdapter extends PagerAdapter {

/**
* Indica o número de telas que o Adapter vai montar.
*/
  @Override
  public int getCount() {
   return NUM_AWESOME_VIEWS;
  }

/**
* Método responsável pelo carregamento das suas telas
* No exemplo eu uso uma quantidade de telas estáticas e diferentes,
* por isso preciso tratar qual tela devo carregar,
* pois este método sera chamado uma vez para cada tela que vc indicou 
* que vai montar no método getCount()
*/
  @Override
  public Object instantiateItem(View collection, int position) {
   
   switch (position) {
    case 0:
                    // Carrega tela 1
     LinearLayout tela1 = (LinearLayout) View.inflate(ControleJogoActivity.this, R.layout.tela_1, null);
     
                    // Carrega dados da tela 1 

                    // Add tela ao ViewPager
     ((ViewPager) collection).addView(tela1, position);
     
     return tela1;
     
    case 1:
                    // Carrega tela 2 
     LinearLayout tela2 = (LinearLayout) View.inflate(ControleJogoActivity.this, R.layout.tela_2, null);
     
                    // Carrega dados da tela 2

                    // Add tela ao ViewPager
     ((ViewPager) collection).addView(tela2, position);
     
     return tela2;
     
    default:
     return null;
   }
  }

  /**
   * Remove a tela pela posição. 
   */
  @Override
  public void destroyItem(View collection, int position, Object view) {
   ((ViewPager) collection).removeView((LinearLayout) view);
  }

  @Override
  public boolean isViewFromObject(View view, Object object) {
   return view == ((LinearLayout) object);
  }

  @Override
  public void finishUpdate(View arg0) {}

  @Override
  public void restoreState(Parcelable arg0, ClassLoader arg1) {}

  @Override
  public Parcelable saveState() {
   return null;
  }

  @Override
  public void startUpdate(View arg0) {}
 }

Linnk com os fontes de onde foi baseado este tutorial (a única alteração feita no fonte, foi no carregamento das telas 1 e 2):
http://code.google.com/p/viewpagerexample/source/browse/trunk/AwesomePager/src/com/geekyouup/paug/awesomepager/AwesomePagerActivity.java

Link do blog oficial do Android para criação de um Horizontal View Swiping:
http://android-developers.blogspot.com/2011/08/horizontal-view-swiping-with-viewpager.html

sexta-feira, 9 de março de 2012

Criando um tema com Widgets customizados

Primeiramente, crie os estados de cada widget (EditText, ComboBox, CheckBox, e outros que você queira...) setando cada estado com um drawable diferente. Exemplo:

 



    
    
    
    
    

    
    



Após criado os estados de cada um dos widgets, crie outro arquivo styles.xml e faça a herança dos widgets, sobrepondo o backgroudn de cada um pelo seu próprio background (os states!)

EXEMPLO:


Para finalizar, crie (no mesmo arquivo que o de cima, ou em um arquivo separado... tanto faz!) um tema extendendo um tema do android (como o Theme.Light) e faça e sobrescreva o styles dos widgets:


Observação: as propriedades "android:editTextSyle", "android:checkboxSyle", "android:buttonSyle", e outras não irão aparecer no CTRL + ESPAÇO do eclipse.

Tutorial para postagens usando o SyntaxHighliter

Para postar códigos usando o SyntaxHighlighteré só colocar a seguinte tag antes do código:

< pre class="brush: java;">

//COLOQUE O CÓDIGO (java, xml) AQUI DENTRO
< pre>
Só isso!

sexta-feira, 3 de fevereiro de 2012

Exemplo de um SlidingDrawer que sobreponha os outros elementos da Activity

Quando se cria um SlidingDrawer dentro de um layout que não seja um RelativeLayout, ele não irá sobrepor os outros elementos da tela. O segredo é colocá-lo dentro de um RelativeLayout, e ser o último elemento! Cada elemento que for adicionado a tela depois do SlidingDrawer ficará sobre ele ao arrasta-lo.



    

        

        

            
        

    
    
    

        

        
        
        
    



Criando uma GridActivity com número de elementos variando com a orientação

Primeiramente, tenha em mãos sua classe de modelo. Exemplo:
 class Time {
     String nome;
     int bandeira;
     public Time(String nome, int band){
      this.nome=nome;
      this.bandeira=band;
     }
  
     @Override
     public String toString() {
      return nome;
     }
     
    }
Em seguida, implemente uma classe filha de ArrayAdapter (ou outra classe filha de ListAdapter):
class ListItemAdapter extends ArrayAdapter< Time> {

  public ListItemAdapter(Context context, int textViewResourceId,
    List< Time> objects) {
   super(context, textViewResourceId, objects);
   
  }
  
  
  
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
   LayoutInflater inflater = (LayoutInflater) GridActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   View v = inflater.inflate(R.layout.list_item, null);

   ImageView img = ((ImageView) v.findViewById(R.id.imagemmm));
   img.setImageDrawable( getResources().getDrawable(getItem(position).bandeira) );
   
   TextView txt = ((TextView) v.findViewById(R.id.ronaldo));
   txt.setText(getItem(position).nome);
   
   return v;
  }
  
  
  
 }
Agora é só implementar o método onCreate passando a lista de times como parâmetro:
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.gridteste);
  
  GridView grid = (GridView) findViewById(R.id.grid);

  //Cria uma Lista de objetos Time
        final List
Screenshots: