Android : Voltear pantalla, apaisado o horizontal con xml

Blog >Lista Soluciones >  Volteo de pantalla 



Resolvemos el problema de volteo de pantalla, sea horizontal o apaisado, por medio de recurso .xml

Una aplicación Android va a poder ser ejecutada en una gran variedad de dispositivos.
El tamaño de pantalla, la resolución o el tipo de entradas puede variar mucho de un dispositivo a otro. Por otra parte, nuestra aplicación ha de estar preparada para diferentes modos de funcionamiento, como el modo ahorro de batería o modo noche o incluso para poder ejecutarse en diferentes idiomas.

Para crear el interfaz de usuario hemos de tener en cuenta todas estas circunstancias. Android proporciona una herramienta de gran potencia para resolverlo, el uso de los recursos alternativos.

Bueno, vamos al lio... abres eclipse y te creas tu proyecto con una actividad, en ella inserta lo que veas más conveniente, por ejemplo la mía:



Aquí podeis ver que hay un TextView, una extructura de Layouts para centrar los elementos y 4 botones, pues bien, ejecutala.

Los teléfonos móviles basados en Android permiten cambiar la configuración en apaisado y en vertical. Para conseguirlo con el emulador pulsa Ctrl+F11. ¿Que ocurre? En la gran mayoría de los casos, la actividad ha cambiado a modo apaisado, y seguramente se ha descuadrado, sobre todo si usando un dispositivo pequeño observas el resultado de la vista que acabas de diseñar en vertical no queda todo lo bien que desearíamos. 
Para resolver esto Android te permite diseñar una vista diferente para la configuración horizontal y otra para vertical : ¿Cómo lo hacemos? Crea la carpeta res/layout-land, y dentro de ella copia en ella el fichero activity_main.xml.


Se creará una vista similar a la de tu actividad main.xml pero en horizontal,si has trabajado y has cuadrado bien los LinearLayout que contienen el TextView y los Button no te hará falta retocarla, sino trabaja en ella asta que consigas el efecto deseado.

Ya no hace falta ni tocar más codigo ni configurar nada, Android automáticamente te cambiará de una vista a otra una vez ejecutes la aplicación en el emulador y pulses Ctrl+F11 o la ejecutes en un dispositivo real.

Y este es el resultado :





Podeis descargar el código fuente de thebestandroide con sólo compartir en facebook,twitter,linkedin o suscribirte a nuestro canal RSS más abajo. 



Compartir Compartir Compartir Compartir




Android : ListView con ImageView + TextView

Blog >Lista Soluciones > ListView imagen + foto





Lista mediante un ListView y adapter que contendrá una imágen y texto por fila.

Hola developers, hoy continuando con el blog, vamos a hacer una lista mediante un ListView y un adapter que contendrá una imágen y texto por fila. El programa consta de 3 clases, una de ellas la actividad principal, bien así a groso modo, primero se hace una clase en "bruto" de los elementos del item, que estos será una clase con un texto y una imágen, sencillito, un JavaBeans de toda la vida :


public class elemento {
 
 public Drawable imagen;
 public String texto;
 public long id;

 //CONSTRUCTOR2
 public elemento(Drawable img,String text) {
  super();
  this.texto =text;
  this.imagen=img;
 }
 
 //CONSTRUCTOR 1
 public elemento(Drawable img,String text,long id) {
  super();
  this.texto =text;
  this.imagen=img;
  this.id = id;
 }
 public Drawable getImagen() {
  return imagen;
 }
 public void setImagen(Drawable imagen) {
  this.imagen = imagen;
 }
 public String getTexto() {
  return texto;
 }
 public void setTexto(String texto) {
  this.texto = texto;
 }
 public long getId() {
  return id;
 }
 public void setId(long id) {
  this.id = id;
 } 
}


Hay 2 constructores, uno con el id y otro sin él, nosotros de momento solo nos preocuparemos del constructor2, que no tiene el id. Bien, ahora vamos haciendo nuestra activida principal, en la que en la interfad gráfica, hemos creado un ListView que hemos asignado un id=lista y además he importado a drawable 3 imágenes, que son las que usare de iconos para cada item.


public class MainActivity extends Activity {
 private MenuItem item;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  b1=(Button) findViewById(R.id.button1);
  
  ListView lista = (ListView) findViewById(R.id.lista);
        ArrayList arraydir = new ArrayList< elemento>();
        elemento item;
 
        // Introduzco los datos
        item = new elemento(getResources().getDrawable(R.drawable.icon1), " 

Vectorial");
        arraydir.add(item);
        item = new elemento(getResources().getDrawable(R.drawable.icon2), " 

Bitmap");
        arraydir.add(item);
        item = new elemento(getResources().getDrawable(R.drawable.icon3), " 

3D");
        arraydir.add(item);
    } 
}

Continuamos haciendo la interfad de cada item, mediante un recurso XML que he llamado itemlista, en la carpeta res/layout XML




    

        

        

            

                

            

        

    




Como comentaba antes, se compone de una imagen y de un textView, en la que la idea en esencia, es que se rellene con la imagen y texto distintos de cada item.
Ahora si hay que tener en cuenta el constructor1 de la clase elemento, ya que el adaptador usa como índice el id.

¿Cómo se introduce una imagen y un texto en una lista? mediante el adaptador. Esta clase es un poco complicadilla, ya que hay varios métodos que se ejecutan automáticamente sin ser llamados, como el getView() pero una vez estudiada un poco, es facilita de comprender :


public class MenuAdapter extends BaseAdapter{
 
    protected Activity activity;
    //ARRAYLIST CON TODOS LOS ITEMS
    protected ArrayList items;
    
    //CONSTRUCTOR
    public MenuAdapter(Activity activity, ArrayList items) {
        this.activity = activity;
        this.items = items;
      }
    //CUENTA LOS ELEMENTOS
    @Override
    public int getCount() {
        return items.size();
    }
    //DEVUELVE UN OBJETO DE UNA DETERMINADA POSICION
    @Override
    public Object getItem(int arg0) {
        return items.get(arg0);
    }
    //DEVUELVE EL ID DE UN ELEMENTO
    @Override
    public long getItemId(int position) {
        return items.get(position).getId();
    }
    //METODO PRINCIPAL, AQUI SE LLENAN LOS DATOS
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // SE GENERA UN CONVERTVIEW POR MOTIVOS DE EFICIENCIA DE MEMORIA
     //ES UN NIVEL MAS BAJO DE VISTA, PARA QUE OCUPEN MENOS MEMORIA LAS 

IMAGENES
        View v = convertView;
        //ASOCIAMOS LA VISTA AL LAYOUT DEL RECURSO XML DONDE ESTA LA BASE DE 

CADA ITEM
        if(convertView == null){
            LayoutInflater inf = (LayoutInflater) activity.getSystemService

(Context.LAYOUT_INFLATER_SERVICE);
            v = inf.inflate(R.layout.itemlista, null);
        }
 
        elemento dir = items.get(position);
        //RELLENAMOS LA IMAGEN Y EL TEXTO
        ImageView foto = (ImageView) v.findViewById(R.id.imageItem);
        foto.setImageDrawable(dir.getImagen());
        TextView nombre = (TextView) v.findViewById(R.id.textoItem);
        nombre.setText(dir.getTexto());
        
        // DEVOLVEMOS VISTA
        return v;
    }
}




Una vez echo el adaptador, sólo nos queda implementarlo en la actividad principal para que recorra el ListView y ponga todos los elementos que se le asignen, en este caso, solo he introducido 3.

public class MainActivity extends Activity {
 private Button b1;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  //b1=(Button) findViewById(R.id.button1);
  
  ListView lista = (ListView) findViewById(R.id.lista);
        ArrayList arraydir = new ArrayList< elemento>();
        elemento item;
 
        // Introduzco los elementos
        item = new elemento(getResources().getDrawable(R.drawable.icon1), " 

Vectorial");
        arraydir.add(item);
        item = new elemento(getResources().getDrawable(R.drawable.icon2), " 

Bitmap");
        arraydir.add(item);
        item = new elemento(getResources().getDrawable(R.drawable.icon3), " 

3D");
        arraydir.add(item);
        //ADAPTER
        MenuAdapter adaptador = new MenuAdapter(this, arraydir);
        lista.setAdapter(adaptador);
 
    } 
}


No os preocupeis por el número de items, automáticamente se insertará un scroll para que con el dedo podamos arrastrar hasta abajo.Y este, es el resultado :








Podeis descargar el código fuente de thebestandroide con sólo compartir en facebook,twitter,linkedin o suscribirte a nuestro canal RSS más abajo. 



Compartir Compartir Compartir Compartir




Android : Acceder a la cámara mediante Java

Blog >Lista Soluciones > Hacer foto codigo Java





Acceder a la cámara del dispositivo

Buenas desarrolladores, en este post vamos a ver como tener acceso a la cámara del dispositivo, sacar una foto y visualizarla en un ImageView, es algo super simple, sólo que navegando por .net me he encontrado formas más tediosas y complicadas de hacerlo, así que bien comento un poquito el código y despues lo posteo: Esta es la imagen de la actividad, es un LinearLayout en el que hay un botón y un Imageview



Y este es el código del xml de la actividad:


    

Bien, ahora vamos donde esta la chicha, es sencillito, así que tengo poco que comentar, en resumen, se crea un intent para acceder a la cámara y después se le asigna la imagen mediante un objeto Bitmap para que se muestre en el ImageView

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
//CODIGO SACADO DE http://thebestandroide.blogspot.com.es
//BY oOo mAkOnE oOo
public class MainActivity extends Activity {
 //OBJETOS DE LA INTERFAD
 private Button botonacceso;
 private ImageView imagen;
 //CONSTANTE FOTO
 private static final int FOTO=1;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  //instanciamos boton
  botonacceso=(Button)findViewById(R.id.button1);
  //instanciamos imagen
  imagen=(ImageView)findViewById(R.id.imageView1);
  
  //le aplicamos el listener para el evento de clikar en el boton
  botonacceso.setOnClickListener(new OnClickListener(){
   @Override
   public void onClick(View v) {
    // generamos intent, starActivityForResult, es para lanzar el intent
    //con intención de recoger resultado
    Intent irAcamara = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(irAcamara,FOTO);
   }
  });
 }
 //metodo para recoger resultado 
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  //Vemos si el código de la foto es igual a de nuestra constante FOTO
  if(requestCode==FOTO){
   //recogemos foto en objeto Bitmap
   Bitmap miImagen = (Bitmap) data.getExtras().get("data");
   //Lo colocamos en el ImageView
   imagen.setImageBitmap(miImagen);
  }
  super.onActivityResult(requestCode, resultCode, data);
 }
}

NOTA : la función onActivityResult se puede crear pulsando BOTON DERECHO/SOURCE/OVERRIDE IMPLEMENT METHODS, ahi se busca, se selecciona y se implementa.

Y este es el resultado:




El fuente está en la version 4.4.2 Android Kit-kat


Podeis descargar el código fuente de thebestandroide con sólo compartir en facebook,twitter,linkedin o suscribirte a nuestro canal RSS más abajo. 



Compartir Compartir Compartir Compartir



Developer solutions

Blog > Lista Soluciones



LISTA DE SOLUCIONES ANDROID DEVELOPER MOBILE


  • View Widgets
          TextView
          Cambiar color Java XML

           ImputText
           Contar caracteres de un ImputText mediante Java

           LinearLayout
           Manejar alto y ancho LinearLayout mediante Java

           Button
           Cambio diseño Button XML onClick()

           ListView
           Listview Texto + Image 


  • Vibracion
          Vibración dispositivo
          Vibración mediante del dispositivo mediante Java


  • Notificationes
          Notification Manager
          Notificaciones: nueva instancia y vuelta a la anterior

          Toast
          Toast con Imagen

          ContextMenu
          ContextMenu+RadioButton (I)

          ContextMenu+Imagen por iTem (II)



  • Preferencias
          Shared Preferences
          Guardar y cargar entero



  • Hardware Android
          Accediendo al dispositivo
          Usando TelephonyManager

          Sacar Fotografia
          Sacar foto onActivityResult()

          Calibrado de pantalla
          Vertical -> apaisado



  • Animaciones
          Frames
          Animacion XML/JAVA I 

          Programacion XML
          Animacion XML/JAVA II

  • Bitmaps
          Por referencia
          Bitmaps con SoftReference

  • Hilos
         AsinkTask
         Lanzamiento segundo hilo

  • Fragments
         Fragments
          Fragments en Android 
          Comunicación entre fragments

          Menu Fragments
          Drawer Menú para Fragments en Android 

         











Compartir Compartir Compartir Compartir




Sobre el blog Thebestandroide

Blog THEBESTANDROIDE


Blog > Sobre el blog

Thebestandroide es un blog orientado a la programación basado en un intenso estudio profesional a base de profundizar en el combo de lenguajes por los que se construyen aplicaciones móviles, ya sea JAVA y XML para Android o Objetive-C para iOS.

Incluye desde problemas básicos hasta errores complejos ya con soluciones para que tu aprendizaje en las plataformas Android e iOS tenga una fuente optimizada en castellano desde Internet. Thebestandroide cuenta con las siguientes características:

  • Basado en la plataforma Blogger. Blogger te permite publicar contenidos de forma rápida y muy sencilla, para que el blog esté siempre actualizado y los developers encuentren rapidamente la solución. 

  • Articulos completos y explicados, hay que tener en cuenta que el blog está pensado para esos desarrolladores que poseen ya conceptos avanzados de java y C. Hay fragmentos de código como instancias de objetos, en las que se presupone que ya se saben ciertos conceptos básicos.

  • Usa la herramienta SyntaxHighlighter para mostrar el código fuente en formato "programación", favorece la lectura rápida, ordenada y extructurada del código fuente.

  • Un tutorial para empezar desde 0 con Objetive-C en el apartado iOS del blog. Podeis acceder desde aquí.
  • Una lista de las soluciones publicadas a lo largo de este tiempo en Java para Android, podeis acceder desde aquí.
  • Una sección que hace la función de repositorio de código para conexiones en servidores, como JSON o Twitter desde aquí.

  • Mucho esfuerzo y ganas de aprender día a día, para compartir con todos vosotros los conocimientos aprendidos.
















Compartir Compartir Compartir Compartir




Android : Rotar ImageView XML

Blog >Lista Soluciones > Rotar ImageView codigo XML


Animar una ImageView en una vista a través de un archivo XML.
 
Buenas, vamos a ver como animar una imágen en una vista a través de un archivo xml.Tenemos la imagen, yo la he llamado sol.png




Después en el proyecto, sino hay carpeta drawable, crearla y dentro arrastrar la imagen,y también creamos otra carpeta anim, donde dentro de ella insertamos un archivo xml con el ResourceType: TweenAnimation





Ahora vamos al código
XML, Creamos el objeto rotar y le asignamos propiedades

:

    
    



En activity_main.xml pongo una imagen y un boton, al pulsar sobre el botón, veremos como gira la imagen, así queda la clase de la actividad de Java:



import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {
 private Context context=this;
 private Button b1;
 private ImageView imagen;
 private Animation rotacion;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  //Instancio objetos
  imagen=(ImageView) findViewById(R.id.imageView1);
  b1=(Button) findViewById(R.id.button1);
  //EVENTO ONCLICK AL BOTON
  b1.setOnClickListener(new OnClickListener(){
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    rotacion= AnimationUtils.loadAnimation(context, R.anim.rotar);
    imagen.setAnimation(rotacion);
   }
  });
 }
}


Y este es el resultado:






Podeis descargar el código fuente de thebestandroide con sólo compartir en facebook,twitter,linkedin o suscribirte a nuestro canal RSS más abajo. 



Compartir Compartir Compartir Compartir



Android : Información sobre gráficos en Android

Debido a que he recibido varios e-mails a cerca del post sobre como gestionar gráficos, pongo unas páginas interesantes sobre el tema, personalmente no se mucho del tema y voy ahora a ver como empiezo, ire posteando como siempre los problemas, y si tengo tiempo, hasta tutorial de cómo empezar con OpenGL.

http://androideity.com/2011/08/23/andengine-el-motor-de-juegos-2d-opengl-para-android/

http://www.genbetadev.com/programacion-de-videojuegos/como-empezar-a-programar-videojuegos

http://www.linux-magazine.es/issue/84/032-035_Android3DLM84.pdf

Android :TelephonyManager para acceso datos dispositivo móvil

Blog >Lista Soluciones > TelephonyManager


Usamos la clase TelephonyManager para acceder a los datos del dispositivo móvil Android





Esta clase que constituye un centro de información del dispositvo móvil. Es sencillo de usar y puedes acceder a varios datos del dispositivo, no doy ninguna explicación más ya que es sencillito de entender:


package com.example.datostlf;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.widget.TextView;

public class MainActivity extends Activity {
 private TextView t1;
 private TextView t2;
 private TextView t3;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  //Instancio textviews actividad principal
  t1=(TextView) findViewById(R.id.textView1);
  t2=(TextView) findViewById(R.id.textView2);
  t3=(TextView) findViewById(R.id.textView3);
  //Instancia de esta clase para obtener los datos del telefono
  final TelephonyManager datosTelefono=
    (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
  
  t1.setText("Estado de la llamada : "+datosTelefono.getCallState());
  t2.setText("Id DEL dispositivo : "+datosTelefono.getDeviceId());
  t3.setText("Operador SIM : "+datosTelefono.getSimOperatorName());
  
  //NO OLVIDAR COLOCAR PERMISOS ANDROID MANIFEST
  //
 }
}



Podeis descargar el código fuente de thebestandroide con sólo compartir en facebook,twitter,linkedin o suscribirte a nuestro canal RSS más abajo. 



Compartir Compartir Compartir Compartir





Android: Clase Java para Preferencias

Blog >Lista Soluciones > Shared Preferences



Gestion de preferencias para Android usando Shared Preferences


Buenas, hoy traigo una clase Java para gestionar preferencias de un entero, pero he de aclarar, como sólo veo ejemplos en .net de guardar y cargar preferencias en una actividad, tengo que destacar que es UNA CLASE JAVA de apoyo para guardar enteros especificamente, no es actividad, no hace falta ni declararla como actividad ni tocar el Androidmanifest.xml.

Ejemplos de lo que os comento os los podeis encontrar aquí:
www.sgoliver.net
www.ajpdsoft.com
 
Los links anteriores tratan de una actividad dedicada exclusivamente a manejar las preferencias dentro de la actividad, sin embargo esta clase, es de apoyo para llamarla desde cualquier actividad para manejar las SharedPreferences


import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
public class preferencias extends Activity{
 private Context context;
 //MODO DE PREFERENCIAS
 int mode=MODE_PRIVATE;
 /**
  *  MODE_PRIVATE. Sólo la aplicación tiene acceso a estas preferencias.
     *MODE_WORLD_READABLE. Todas las aplicaciones pueden leer estas preferencias, pero sólo esta puede modificarlas.
     *MODE_WORLD_WRITABLE. Todas las aplicaciones pueden leer y modificar estas preferencias.
  */
 int numero;
  // TODO Auto-generated method stub
  public preferencias(Context context){
   this.context=context;
   if(context!=null){
    SharedPreferences PREFERENCIAS = context.getSharedPreferences("pref", 0);
   }
  }
  protected void savePreferences(int num){
   //Instancio la preferencia
   SharedPreferences PREFERENCIAS=context.getSharedPreferences("pref",mode);
   //Para editar las preferencias
   SharedPreferences.Editor editor=PREFERENCIAS.edit();
   //inserto en preferencia(nombre indice, valor);
   editor.putInt("numero", num);
   //Cierro edición
   editor.commit();
  }
  protected int loadPreferences(){
   //Instancio la preferencia
   SharedPreferences PREFERENCIAS=context.getSharedPreferences("pref",mode);
   //recojo valor
   numero=PREFERENCIAS.getInt("numero", 0);
   System.out.println("NUMERO= "+numero);
   return numero;
  }
}
Ahora bien, desde el MainActivity o desde la clase que la queramos llamar, debemos pasarle el contexto al constructor, para que pueda funcionar, sino lo hacemos así, dará un horroroso NullPointerExcepcion....

 Context context=this;
 preferencias pref;
 pref=new preferencias(context);



Podeis descargar el código fuente de thebestandroide con sólo compartir en facebook,twitter,linkedin o suscribirte a nuestro canal RSS más abajo. 



Compartir Compartir Compartir Compartir