Como quitar barra de titulo o barra de notificaciones, title bar y notification bar

Objetivo:

Vamos a aprender a quitar la barra de título (titlebar) y la barra de notificaciones (notificationbar) en nuestra aplicación Android.

La barra de título muestra el título que tiene nuestra aplicación Android según lo hayamos definido en el AndroidManifest.xml. La barra de notificaciones posee la hora, estado de la batería, conexiones a internet/gps, y las notifiaciones de calendarios, mensajes, etc:

Barras de titulo y notificaciones

Hay varias formas de hacerlo: para toda la aplicación o para cada activity. Vemos cada caso:

    1. En general (para toda la aplicación)
      Si queremos que en una sola línea de código quitemos alguna de las barras (título o notificación) para toda la aplicación, debemos añadir en el AndroidManifest.xml, dentro de la etiqueta application, el código de android:theme que se observa a continuación:
      [sourcecode language=”xml”]
      <!– Theme.NoTitlebar quita el titulo–>
      <application android:icon="@drawable/icon"
      android:label="@string/app_name"
      android:theme="@android:style/Theme.NoTitleBar">
      [/sourcecode]

      o

      [sourcecode language=”xml”]
      <!– añadiendo Fullscreen quita titulo y notificacion–>
      <application android:icon="@drawable/icon"
      android:label="@string/app_name"
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
      [/sourcecode]

    2. Para cada Activity en concreto
      Si lo que deseamos es quitar barras según nos convenga en cada pantalla (activity), podemos hacerlo añadiendo en el código java de cada actividad, dentro del método onCreate, lo siguiente:

      [sourcecode language=”java”]
      //Quitamos barra de titulo de la aplicacion
      this.requestWindowFeature(Window.FEATURE_NO_TITLE);
      [/sourcecode]

      o

      [sourcecode language=”java”]
      //Quitamos barra de notificaciones
      this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
      [/sourcecode]

Como programar un Webview

Objetivo:

Vamos a aprender a crear nuestro primer Webview.

Hay varias formas de hacerlo, pero nos centraremos en la más simple, dando una pautas al final con configuraciones mas avanzadas.

Vemos un resultado final antes.

Ejemplo Webview por tutorialandroid

 

Código fuente java (/src/com.webview/Principal.java):

[sourcecode language=”java”]
package com.webview;

//importaciones necesarias
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class Principal extends Activity {

//Nuestra vista necesaria para la web
private WebView mWebView;

@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);

//asociamos
mWebView = (WebView) findViewById(R.id.webview);

//cargo un .html que he situado en la carpeta asset/ del proyecto
mWebView.loadUrl("file:///android_asset/ejemploWebview.html");
}

}
[/sourcecode]

 

Código fuente XML (/res/layout/main.xml):

[sourcecode language=”xml”]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Aplicacion ejemplo de un Webview"
android:padding="4dip"
android:textSize="16sp"
/>

<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
/>

</LinearLayout>
[/sourcecode]

 

Código fuente HTML (/asset/ejemploWebview.html):

[sourcecode language=”html”]
<html>

<!– Los estilos se proyectarán a nuestra aplicacion –>
<body style="text-align:center">

<strong> Ejemplo Webview, Por TutorialAndroid.com </strong> <br>

<p>Este es un ejemplo de p&aacute;gina web
con texto e im&aacute;genes y links.</p>

<!– Enlace con una imagen de Androide-Feeds –>
<a href="http://www.tutorialandroid.com/feed/">
<img src="http://www.tutorialandroid.com/androidFeed_.png"
height="128" width="128" border="0" alt="RSS"
title="http://www.tutorialandroid.com/feed/"></a>

<p>Link a la web
<a href="http://www.tutorialandroid.com">tutorialandroid.com</a></p>

</body>

</html>

[/sourcecode]

 

Descárgate el código aquí

 

Opciones más avanzadas:

  • Visionar una web situada en internet (y no en nuestro proyecto).
    Para ello debemos sustituir la ruta de carga de la Url por la deseada en el código Java:
    [sourcecode language=”java”]
    mWebView.loadUrl("http://www.tutorialandroid.com");
    [/sourcecode]

    Y no se puede olvidar proporcionar de conexión a internet a la aplicacion en el Manifest.xml (como hijo del tag <manifest>):

    [sourcecode language=”java”]
    <uses-permission android:name="android.permission.INTERNET" />
    [/sourcecode]

  • Permitir más compatibilidad con componentes, tal y como Javascript, simulación de cliente Chrome,  o aparición de un zoom en caso de ser necesario.
    En este caso debemos añadir el siguiente código al método onCreate:
    [sourcecode language=”java”]
    webSettings.setSavePassword(false);
    webSettings.setSaveFormData(false);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setSupportZoom(false);
    mWebView.setWebChromeClient(new MyWebChromeClient());
    mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
    [/sourcecode]
    Y definimos una clase, dentro de la nuestra (Principal.java):
    final class DemoJavaScriptInterface {

    [sourcecode language=”java”]
    final class DemoJavaScriptInterface {

    DemoJavaScriptInterface() {
    }

    /**
    * No es llamada en la interfaz. Crea un runnable para invocar
    * loadUrl en la hebra de la interfaz.
    */
    public void clickOnAndroid() {
    mHandler.post(new Runnable() {
    public void run() {
    mWebView.loadUrl("javascript:wave()");
    }
    });

    }
    }

    /**
    * "alerta" para javascript. Util para depurar javascript.
    */
    final class MyWebChromeClient extends WebChromeClient {
    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
    result.confirm();
    return true;
    }
    }
    [/sourcecode]

Como programar un Context Menu

Objetivo:

Vamos a aprender a crear nuestro primer Context Menu a partir de pulsar un botón.

Se van a ver en concreto dos formas de aparecer el Context Menu:

Al dejar pulsado un botón (es como normalmente aparece un Context Menu)

Al pulsar normal el botón (modificamos el comportamiento para que en este caso también aparezca)

Ejemplo Context Menu Android

Aprendiendo Context Menu Android 2

 

 

 

 

 

 

 

 

 

 

 

 

Código fuente java (Principal.java):

[sourcecode language=”java”]
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Button;
import android.widget.Toast;

public class Principal extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//al Boton_01 le damos el comportamiento normal con
//registerForContextMenu, y al pulsar largamente sale el ContextMenu
Button btn = (Button) findViewById(R.id.button_example);
registerForContextMenu(btn);

//el boton 2, es un boton especial. A diferencia del boton 1,
//haremos que el ContextMenu aparezca al pulsar normalmente el botón
Button btn2 = (Button) findViewById(R.id.button_example2);

}

/**
* Se crea el Context Menu, añadiendo las opciones deseadas
* @param ContextMenu
* @param View
* @param ContextMenuInfo
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Context Menu");
menu.add(0, v.getId(), 0, "Action 1");
menu.add(0, v.getId(), 0, "Action 2");
}

/**
* Se definen las funciones que se llamarán al pulsar las
* opciones del Context Menu
* @param MenuItem
*/
@Override
public boolean onContextItemSelected(MenuItem item) {
if (item.getTitle() == "Action 1") {
function1(item.getItemId());
}else if (item.getTitle() == "Action 2") {
//function2(item.getItemId());
return true; //pulsando sobre ella salgo
}else{
return false;
}
return true;
}

/**
* Se definen las acciones que se realizan al pulsar la Accion1 en
* del Context Menu.
* En este caso, como ejemplo, damos un mensaje en pantalla
* @param int
*/
public void function1(int id) {
Toast.makeText(this, "Accion 1 llamada", Toast.LENGTH_SHORT).show();
}

/**
* Se definen las acciones que se realizan al pulsar la Accion2 en
* del Context Menu.
* En este caso, como ejemplo, damos un mensaje en pantalla
* @param int
*/
public void function2(int id) {
Toast.makeText(this, "Accion 2 llamada", Toast.LENGTH_SHORT).show();
}

/**
* Funcion auxiliar que se utiliza para el boton2 solamente.
* Con ella conseguimos que al pulsar el boton2 de forma normal,
* aparezca el Context Menu.
* @param View
*/
public void funcionIniciarContextMenuParaBoton2(View v) {
registerForContextMenu(v);
openContextMenu(v);
}

}
[/sourcecode]

 

Código fuente XML (main.xml):

[sourcecode language=”xml”]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">

<!– Texto Inicial para la aplicación –>
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="Aprendiendo Context Menu" />

<!– Creacion boton1. Dejándolo pulsado aparecerá el Context Menu, pero eso
se define el en .java, no aquí –>
<Button android:text="Button01" android:id="@+id/button_example"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

<!– Creacion boton2. Haciendo clic en él llamamos a la funcion que
inicializa el Context Menu manualmente –>
<Button android:text="Button02" android:id="@+id/button_example2"
android:onClick="funcionIniciarContextMenuParaBoton2"
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

</LinearLayout>
[/sourcecode]

 

Descárgate el código aquí

Utilizar el led de la camara como linterna

Objetivo:

Programar un botón para controlar el led de la cámara y poder utilizarlo como linterna.

Logística adicional necesaria:

Para poder probarlo necesitaremos un móvil con led en la cámara, ya que el emulador no muestra información al respecto.

Con este código podremos realizar el apagado y encendido del flash del móvil. Hay que tener en cuenta que el flash consume mucha batería, por lo que se recomienda no realizar un uso continuado del mismo.

Un ejemplo de aplicación creada a partir del código fuente siguiente, sería “Quick Light and Strobe”, donde se muestra una linterna, con posibilidad de cambios de color e incluso funcionar como estroboscopio.

Dejo un enlace de la misma de la misma en la seccion Aplicaciones Recomendadas

Código fuente java (principal.java):

[sourcecode language=”java”]
package com.ejemplo.linternaled;

import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class principal extends Activity {

Camera camera = null;
Parameters parameters;
Button FlashLightControl;

// Called when the activity is first created.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//Creamos un boton con el texto adecuado
FlashLightControl = (Button)findViewById(R.id.flashcontrol);
FlashLightControl.setText("ENCENDER LED CAMARA");
}

/**
* Control LED Camera.
* Esta funcion se ejecuta al clickar el boton que hemos incluido
* @param arg0
*/
public void onClickLED(View arg0) {
try{
// Al pulsar, si el Led estaba encendido se apaga y viceversa
if(camera == null){
camera = Camera.open();
parameters = camera.getParameters();
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
FlashLightControl.setText("APAGANDO LED CAMARA");
}else{
parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.release();
camera = null;
FlashLightControl.setText("ENCENDIENDO LED CAMARA");
}
}catch(Exception e){
//Control errores
}
}

/**
* Si al salir está el LED encendido, lo apagamos.
* Esta funcion es llamada cuando se cierra una aplicación.
*/
public void finish(){
if (camera != null){
parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.release();
camera = null;
}
super.finish();
}
}
[/sourcecode]

Código fuente XML (main.xml):

[sourcecode language=”xml”]
<!–?xml version="1.0" encoding="utf-8"?–>

<!– Titulo de nuestra aplicacion –>

<!– Boton para encender o apagar el led de la camara –>
<button>

[/sourcecode]

Añadir el permiso necesario al AndroidManifest.xml :

[sourcecode language=”xml”]
<!– NECESARIO PARA EL LED FLASH –>

[/sourcecode]

Como permitir mover a la SD Card una aplicacion

En este post vamos a aprender cómo permitir que nuestra aplicación sea movida a la SD Card por un usuario a través del Administrador de Aplicaciones nativo del móvil/tableta.

Objetivos:

Permitir que un usuario de nuestra aplicación que pueda moverla a la SD Card.

Requisitos necesarios:

  • Nuestra aplicación debe tener un build target mínimo de 8 (versión 2.2), ya que antes no está especificada la instrucción que añadiremos, y encontraremos el error:
    No resource identifier found for attribute ‘installLocation’ in package ‘android’

  • Hay que tener en cuenta que los usuarios con una versión de Android anterior a la 2.2 no pueden mover las aplicaciones a la SD C ard a través de la configuración nativa del móvil (podrán si la aplicación tiene dicha opción o si descargan una aplicación que lo realice).

Pasos:

  1. Cambiar el build target a una versión 8, como mínimo:
    En Eclipse -> Boton derecho sobre el proyecto -> Propierties -> Android -> Seleccionamos el build target de 8 o más alto.

  2. Indicar a la aplicación que el usuario podrá elegir moverla a la SD Card:Para ello editamos el fichero AndroidManifest.xml, añadiendo android:installLocation=”auto” dentro la etiqueta <manifest>.
    Ejemplo:
    <manifest xmlns:android=”http://schemas.android.com/apk/res/android package=”com.ejemplo.holaMundo:versionCode=”3″ android:versionName=”1.2″ android:installLocation=”auto”>

  3. Para probarlo, una vez instalada la aplicación (en nuestro móvil físico), podemos ir a Menú -> Ajustes -> Aplicaciones -> Administrar Aplicaciones -> Hacemos clic sobre nuestra aplicación -> Vemos que la opción Mover to SD Card está ya activada.
    Se recuerda que esta opción está en las versiones 2.2 de Android en adelante.

    Memoria del teléfono a la SD Card

 

Nota: si lo deseamos, podríamos obligar a que instale desde primera hora la aplicación en la SD Card o en la memoria del teléfono, podemos poner el valor de android:installLocation=”preferExternal”android:installLocation=”internalOnly”, respectivamente.