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!