En esta entrada se presentan elementos para mejorar el diseño de aplicaciones Android:

  • Lanzadores (representación en la pantalla principal)
  • Barra de estados (iconos de notificaciones)
  • Menú (por actividad)
  • Barra de acciones (experiencia unificada)
  • Pestañas
  • Otros elementos

Iconos

Se pueden usar iconos del sistema Android o crear iconos propios. Para acceder a los recursos del sistema:

Resources recursos = getResources();
Drawable db1 = recursos.getDrawable(android.R.drawable.ic_secure);

Recursos útiles para encontrar o crear iconos:

  • http://androiddrawables.com — catálogo de drawables del sistema
  • Google Design Spec — guía de iconografía de Material Design
  • Android Asset Studio — generador de iconos online

Ejemplo: Aplicación con pestañas (TabHost)

La estructura del layout necesaria para TabHost es:

TabHost → LinearLayout → TabWidget + FrameLayout

Layout XML (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:id="@+id/tab1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" />

            <LinearLayout
                android:id="@+id/tab2"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" />

            <LinearLayout
                android:id="@+id/tab3"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" />
        </FrameLayout>
    </LinearLayout>
</TabHost>

Código Java (MainActivity.java)

import android.app.Activity;
import android.os.Bundle;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.widget.TabHost;
import androidx.core.content.ContextCompat;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Resources recursos = getResources();
        Drawable icono1 = ContextCompat.getDrawable(this, android.R.drawable.ic_secure);

        TabHost tabs = (TabHost) findViewById(android.R.id.tabhost);
        tabs.setup();

        TabHost.TabSpec spec = tabs.newTabSpec("mitab1");
        spec.setContent(R.id.tab1);
        spec.setIndicator("TAB1", icono1);
        tabs.addTab(spec);

        spec = tabs.newTabSpec("mitab2");
        spec.setContent(R.id.tab2);
        spec.setIndicator("CONTACTO", icono1);
        tabs.addTab(spec);

        spec = tabs.newTabSpec("mitab3");
        spec.setContent(R.id.tab3);
        spec.setIndicator("INFORMACIÓN", icono1);
        tabs.addTab(spec);
    }
}

Nota: Android actualmente recomienda usar ActionBar con fragmentos en lugar de TabHost, que está considerado obsoleto.