terça-feira, 11 de março de 2014

Dicas de Android 10

Olá povo,

Mais um post da série "Dicas de Android". Aproveitem!

Dica 1. Densidades de tela no Android e seus DPIs.
Atualmente temos dispositivos Android de diversos tamanhos e com qualidade de tela diferentes. É importante sabermos a tabela abaixo para usar imagens adequadamente para cada um deles.
DensidadeDots per inchProporção
LDPI120dpi0.75
MDPI160dpi1.00
HDPI240dpi1.50
XHDPI320dpi2.00
XXHDPI480dpi3.00
XXXHDPI640dpi4.00

Dica 2. Obter as polegadas de um aparelho. Dica de Maurício Taumaturgo.
public double getInch(Activity act) {
  DisplayMetrics displayMetrics = new DisplayMetrics();
  act.getWindowManager().getDefaultDisplay()
    .getMetrics(displayMetrics);

  double x = Math.pow(
    displayMetrics.widthPixels/displayMetrics.xdpi,2);
  double y = Math.pow(
    displayMetrics.heightPixels/displayMetrics.ydpi,2);
  double screenInch = Math.sqrt(x+y);
  return screenInch; 
}

Dica 3. HTML no TextView. Dica de Diego Nascimento (aluno do TECDAM)
O Android suporta algumas tags HTML dentro do componente TextView. Mas se quisermos carregar as imagens da tag <img /> usamos a classe ImageGetter.
TextView tvText = (TextView) findViewById(R.id.text);
final String textoEmHtml = 
  "<html><body>Html em "
  + "<b>Negrito</b> e <i>Itálico</i>"
  + "<img src='mario.png' />"
  + "Mais um texto qualquer"
  + "<img src='luigi.png' />"
  + " texto depois da imagem</body></html>";

ImageGetter imgGetter = new ImageGetter() {
  public Drawable getDrawable(String source) {
    BitmapDrawable drawable = null;
    try {
      Bitmap bmp = BitmapFactory.decodeStream(
        getAssets().open(source));

      drawable = new BitmapDrawable(
        getResources(), bmp);

      drawable.setBounds(
        0, 0, bmp.getWidth(), bmp.getHeight());

    } catch (IOException e) {
      e.printStackTrace();
    }
    return drawable;
  }
};

meuTextView.setText(
  Html.fromHtml(textoEmHtml, imgGetter, null));

Dica 4. Customizando ActionBar
A ActionBar é utilizada como padrão navegacional do Android. Entretanto, customiza-la para com as cores da sua aplicação requer um certo esforço. Para minizar esse trabalho, é possível gerar os arquivos de recurso para personalizar a ActionBar através do site Android ActionBar Style Generator.

Dica 5. EditText com imeOptions e inpuType
A propriedade inputType do EditText indica qual o formato do teclado virtual mais adequado para a caixa de texto, enquanto a propriedade imeOptions indica o botão de ação do teclado.
<EditText
  android:id="@+id/editText1"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:inputType="textEmailAddress"
  android:imeOptions="actionDone" />
final EditText edtEmail = 
  (EditText)findViewById(R.id.editText1);
edtEmail.setOnEditorActionListener(
  new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(
      TextView v, int actionId, KeyEvent event) {

      if (v == edtEmail && 
        EditorInfo.IME_ACTION_DONE == actionId) {

        String email = edtEmail.getText().toString();
        if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()){
          edtEmail.setError("Email inválido!");
        }
        return true;
      }
      return false;
    }
});
Dica 6. Carregando HTML com CSS e JavaScript no WebView
Se você for carregar um arquivo HTML que está dentro do seu APK, e esse arquivo usa arquivos de CSS e JavaScript, aconselho coloca-los na pasta assets do seu projeto e carregá-los da seguinte forma:
mWebView = (WebView) v.findViewById(R.id.webView1);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
mWebView.loadDataWithBaseURL(
  "file:///android_asset/", 
  "Meu Html que usa CSS e JS",
   "text/html", "UTF-8", null);

4br4ç05,
nglauber

4 comentários:

César Oliveira disse...

Olá Nelson, boa tarde,

Para carregar o conteúdo que está no seu blog com texto e imagens, você usa o EditText para disponibilizar esse conteúdo no seu aplicativo Android ? Ou é outra coisa ?

Cunprimentos
César Malainho

Nelson Glauber disse...

Oi Cesar,

Não. Utilizo uma WebView :)

4br4ç05,
nglauber

César Oliveira disse...

Entendi, Seria possível usar o EditText para apresentar esse conteúdo ?

Nelson Glauber disse...

Oi Cesar,

Eu nunca fiz com EditText teria realmente que testar. Mas teoricamente o TextView (superclasse de EditText) suporta algumas tags HTML, então funcionaria parcialmente.

4br4ç05,
nglauber