Criando uma barra de classificação de conteúdo para Android
Veja nesse artigo como criar uma barra de classificação de conteúdo para Android.
No mundo de desenvolvimento de software é extremamente comum que novas funcionalidades nasçam e que os usuários se tornem cada vez mais exigentes, haja vista a grande gama de componentes e tecnologias que surgem dia após dia.
Diante deste cenário, tendo uma visão de desenvolvedor ou profissional de TI, é também bem comum que o mesmo tenha de se adaptar às tecnologias com demasiada velocidade e produtividade.
Quando o cenário se aplica o mundo mobile, então a rapidez com o que as coisas “andam” tende a ser bem maior. Os dispositivos que operam a plataforma Android dispõem de um bom número de features disponibilizadas pelo próprio Google para ajudar os profissionais no processo de desenvolvimento. Por exemplo, em muitos aplicativos móveis já é possível encontrar widgets de avaliação e ranking como o próprio Google Play, aplicativo oficial de loja do Google para apps (Veja Figura 1).
Nota: Widgets são todos os principais componentes gráficos das telas do Android, tais como botões, janelas, etc.
Figura 1: Exemplo de tela com botões de avaliação
No Android, você pode usar a classe (isso mesmo, lembre-se: Android usa como linguagem base o Java) "android.widget.RatingBar" para exibir o componente de barra de classificação com ícone de estrelas. O usuário é capaz de tocar, arrastar ou clicar nas estrelas para definir o valor de uma classificação facilmente. Inclusive é um widget padrão e pode ser encontrado na paleta default de widgets que o Eclipse disponibiliza para trabalhar graficamente.
Na documentação oficial é possível encontrar a seguinte descrição (traduzido e adaptado):
A RatingBar é uma extensão da SeekBar e ProgressBar que mostra a classificação em estrelas. O usuário pode tocar / arrastar ou usar as teclas de seta para definir a classificação ao usar o RatingBar de tamanho padrão. O estilo da RatingBar menor (ratingBarStyleSmall) e o amplamente usado indicador do único estilo (ratingBarStyleIndicator) não suportam a interação do usuário e deve ser utilizado apenas como indicadores.
O uso de um RatingBar que suporta interação com o usuário, colocando widgets para a esquerda ou direita do RatingBar é desencorajado.
O número de estrelas configurado (via setNumStars (int) ou em um layout XML) será mostrado quando a largura do layout está definido para envolver o conteúdo (se outra largura de layout estiver definida, os resultados podem ser imprevisíveis).
O progresso secundário não deve ser modificado pelo cliente, uma vez que é usado internamente como fundo para uma estrela fracionadamente preenchida.
Neste tutorial, veremos como usar XML para exibir a barra de classificação, alguns Textviews (Labels) e um botão. Quando o usuário clicar sobre a estrela da barra de classificação, o valor de classificação selecionado será exibido no Textview. E, se o usuário clicar no botão, o valor de classificação selecionado será exibido como uma mensagem flutuante (os famosos Toast’s).
O Projeto
Crie um projeto Android de modelo no Eclipse (ou IDE de sua preferência. Mas seria aconselhado usar o Eclipse pelos passos do artigo). Delete todos os arquivos de hello_world que ele criar e/ou renomeie para “índex.xml”, no caminho de pasta “res/layout”.
Observação: Os passos para criar o projeto e deletar os arquivos serão omitidos para não prolongar muito o artigo. Subentende-se que o leitor consiga fazer estes passos. Caso contrário, só comentar no post.
Crie todos os componentes adicionando o XML contido na Listagem 1.
Listagem 1: Código de criação da tela de index.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" >
<TextView
android:id="@+id/lblAvalie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Avaliar" />
<RatingBar
android:id="@+id/ratingBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="4"
android:stepSize="1.0"
android:rating="2.0" />
<Button
android:id="@+id/btnSubmit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit" />
<LinearLayout
android:id="@+id/linearLayoutAux"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<!-- Adicionar as strings ao arquivo string.xml. Omitido aqui! -->
<TextView
android:id="@+id/lblResultado"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Resultado : "
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/txtValorAvaliacao"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
</LinearLayout>
</LinearLayout>
A barra de avaliação contém muitos valores configuráveis. Neste caso, a barra de classificação contém quatro estrelas, cada uma aumenta o valor em 1.0, então, contém um mínimo de 1,0 (1 estrela) e um valor máximo de 4,0 (4 estrelas). Além disso, ele faz com que a segunda estrela (2.0) seja selecionada por padrão.
Em seguida, crie e/ou renomeie a classe Activity para o exemplo em questão. Dentro da mesma, no método "onCreate()", adicione um ouvinte para a barra de avaliação, e dispare o mesmo quando o valor de avaliação for alterado. Outro ouvinte no botão, e dispare quando o botão for clicado (Listagem 2). Leia os comentários do código, eles são autoexplicativos.
Listagem 2: Classe Activity
package br.edu.devmedia.android;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RatingBar;
import android.widget.RatingBar.OnRatingBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;
public class MinhaActivity extends Activity {
private RatingBar ratingBar;
private TextView txtValorAvaliacao;
private Button btnSubmit;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.index);
addListenerOnRatingBar();
addListenerOnButton();
}
public void addListenerOnRatingBar() {
ratingBar = (RatingBar) findViewById(R.id.ratingBar);
txtValorAvaliacao = (TextView) findViewById(R.id.txtValorAvaliacao);
//se o valor de avaliação mudar,
//exiba o valor de avaliação atual no resultado (textview) automaticamente
ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
public void onRatingChanged(RatingBar ratingBar, float avaliacao, boolean fromUser) {
txtValorAvaliacao.setText(String.valueOf(avaliacao));
}
});
}
public void addListenerOnButton() {
ratingBar = (RatingBar) findViewById(R.id.ratingBar);
btnSubmit = (Button) findViewById(R.id.btnSubmit);
//se o botão for clicado, exiba o valor de avaliação corrente.
btnSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MyAndroidAppActivity.this,
String.valueOf(ratingBar.getRating()),
Toast.LENGTH_SHORT).show();
}
});
}
}
Considerando o cenário de aplicativo geral do Android, você deverá ver também a questão do arquivo coração do projeto: o AndroidManifest.xml. Veja na Listagem 3 a extensão de código do arquivo para adaptar no seu projeto.
Listagem 3: AndroidManifest.xml com configurações do projeto
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="br.edu.devmedia.android"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".MinhaActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Finalmente o arquivo de strings.xml será envolvido para exibir alguns valores. Veja na Listagem 4 o código para tal.
Nota: Observe que para todas as strings do projeto esse arquivo deve ser usado e considerado como lista de constantes.
Listagem 4: Strings.xml. Arquivos de strings do projeto
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MyAndroidApp</string>
</resources>
O resultado final pode ser visualizado na Figura 2.
Figura 2: Resultado final
Conclusão
Este artigo mostra ao leitor uma visão breve sobre o componente de RatingBar do Android, muito mais pode ser explorado, em relação ao seu uso e finalidade e principalmente aos ouvintes implementados.
Você pode ficar à vontade para explorar o componente e visualizar o que ele pode ou não fazer.
Artigos relacionados
-
Artigo
-
Artigo
-
Vídeo
-
Artigo
-
DevCast