Programando em Java

Olá a todos,

Quem estiver interessado em aprender o básico da linguagem de programação Java compartilho o meu repositório no GitHub. Nele vocês vão encontrar diversos algoritmos desenvolvidos em disciplina específica na universidade onde estudo que são apresentados em níveis progressivos de dificuldade.

Os exemplos são simples, mas exigem o uso do raciocínio lógico e abordam os conceitos básicos da linguagem.

Faço uso da IDE Intellij IDEA para a programação, mas nada impede de serem usados outros programas, na verdade, podemos programar até em um editor de texto simples (claro que não seria tão fácil)!

Caso tenham dúvidas ou sugestões sobre os exemplos apresentados podem contar comigo!

Segue link do repositório: https://github.com/zapsys/ProgrAv

Métodos úteis no desenvolvimento Android – I

Olá pessoal,

Se você está desenvolvendo em Java, especialmente para Android, você já deve ter se deparado com alguma situação em que desejava alterar atributos (tipo cor, background, tamanho, typeface, etc) durante a execução de um aplicativo, por exemplo. Se você tem um Button ou TextView isso é simples, mas como implementar se tivermos vários widgets dentro do layout.

Com os métodos que compartilho aqui é possível alterar os atributos de vários Buttons, TextViews, usando um resource file (um layout xml).

Os exemplos aqui mostrados são implementados através do método ‘OnOptionsItemSelected‘ que retorna os eventos sobre o clique nos itens do menu, mas podem ser aplicados em outro método ou como uma classe a parte, por exemplo.

Hoje mostrarei como alterar o background de vários botões de uma só vez.

Passo 1: Criar um layout

O xml a seguir implementa três estados de um botão (normal, focused e pressed). A cor que usei foi o verde, mas pode ser alterada de acordo com sua preferência. O layout foi salvo em res/layout/button_green.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
 <item android:state_pressed="true" >
 <shape android:layout_margin="4dp" android:shape="rectangle" >
 <corners android:radius="6dip" />
 <stroke android:width="1dip" android:color="#151A15" />
 <gradient android:angle="-90" android:startColor="#345953" android:endColor="#689a92" /> 
 </shape>
 </item>
<item android:state_focused="true">
 <shape android:layout_margin="4dp" android:shape="rectangle" >
 <corners android:radius="6dip" />
 <stroke android:width="1dip" android:color="#151A15" />
 <solid android:color="#58857e"/> 
 </shape>
 </item> 
<item >
 <shape android:layout_margin="4dp" android:shape="rectangle" >
 <corners android:radius="6dip" />
 <stroke android:width="1dip" android:color="#151A15" />
 <gradient android:angle="-90" android:startColor="#8dbab3" android:endColor="#58857e" /> 
 </shape>
 </item>
</selector>
Passo 2: Criar o método ‘AlterAttr’

Dentro da classe principal, abaixo do OnCreate, definimos:

public static void AlterAttr(View view, int background) {
    if (view != null) {
        // checar se esta view é uma instância de um viewgroup
        if (view instanceof ViewGroup) {
            // passe por todos os filhos deste viewgroup
            for (int i = 0; i &lt; ((ViewGroup) view).getChildCount(); i++) {
                // continue alterando o atributo (recursão)
                AlterAttr(((ViewGroup) view).getChildAt(i),background);
            }
        }
        // checar se esta view é uma instância de um Button
        else if (view instanceof Button) {
            // altere o valor do background
            ((Button) view).setBackgroundResource(background);
        }
    }
}

Como o método busca e analisa os atributos do View (button) dentro do ViewGroup (layout), é necessário que esteja definido um id e o atributo android:background deve estar definido. No exemplo abaixo o fundo padrão dos botões é branco.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/MainLayout"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:layout_weight="1"
 android:textAlignment="center">
 <Button
 android:layout_width="wrap_content"
 android:text="@string/btn1"
 android:id="@+id/btn1"
 android:layout_height="wrap_content"
 android:layout_weight="1"
 android:gravity="center"
 android:visibility="visible"
 android:background="#ffffff"/>
 <Button
 android:layout_width="wrap_content"
 android:text="@string/btn2"
 android:id="@+id/btn2"
 android:layout_height="wrap_content"
 android:layout_weight="1"
 android:gravity="center"
 android:visibility="visible"
 android:background="#ffffff"/>
 <Button android:layout_width="wrap_content"
 android:text="@string/btn3"
 android:id="@+id/btn3"
 android:layout_height="wrap_content"
 android:layout_weight="1"
 android:gravity="center"
 android:background="#ffffff"/>
</LinearLayout>
Passo 3: Chamar o método dentro do ‘OnOptionsItemSelected’

O método a seguir mostra como alterar entre duas opções de cores.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml. 

int id = item.getItemId();
LinearLayout Layout = (LinearLayout) findViewById(R.id.MainLayout); 

 switch(id){
  case R.id.action_button_green:
    AlterAttr(Layout, R.layout.button_green);
    item.setChecked(true);
    break;
  case R.id.action_button_blue:
    AlterAttr(Layout, R.layout.button_blue);
    item.setChecked(true);
    break;
  default: super.onOptionsItemSelected(item);
 }
return true;
}

O método verifica qual opção do menu foi selecionada e aplica o ‘AlterAttr’, respectivo. Para elucidar os ids se referem aos itens do menu, como no xml abaixo:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 tools:context=".Teste">
 <!-- Menu cores -->
 <item android:id="@+id/action_button_cor"
 android:title="@string/button_color"
 app:showAsAction="never">
 <menu>
 <group android:checkableBehavior="single">
 <item android:id="@+id/action_button_blue"
 android:title="@string/button_blue"
 app:showAsAction="never"/>
 <item android:id="@+id/action_button_green"
 android:title="@string/button_green"
 app:showAsAction="never"/>
 </group>
 </menu>
 </item>
</menu>

Quem tiver dúvidas ou sugestões por favor deixe sua mensagem. O próximo post será como alterar atributos de cor de tipo de fonte de TextView e EditText. Até a próxima.