miércoles, mayo 13, 2015

Ley de gravitación universal Android

¿Se han preguntado por qué android tiene gravity y layout_gravity? Si no han sentido curiosidad, a continuación está la razón. 

Gravity


El atributo gravity afecta únicamente la gravedad interna del View. Supongamos que tenemos un botón con gravity "center", el resultado es el siguiente, cabe destacar que "center" es la gravedad default del botón.




Si cambiamos a "end" el resultado será el siguiente.





Si agregamos "|center_vertical" vamos a poder afectar la gravedad del View de dos maneras, vamos a alinear el texto del botón al final y a centro vertical del mismo.

El xml, es el siguiente.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:gravity="center"
   android:orientation="horizontal" >
   <Button
       android:id="@+id/button1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="end|center_vertical"
       android:text="@string/hello_world" />
</LinearLayout>

Al evaluar el XML, tenemos un layout vertical con gravedad center, lo cual centrará vertical y horizontalmente todo lo que esté dentro de el. Los siguiente no generará errores pero no tiene ningún sentido. 


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:gravity="center|center_vertical"
   android:orientation="horizontal" >

Aquí estamos diciendo, LinearLayout, por favor alinea todos tus hijos en mi centro y alinéalos también en mi centro vertical. En este caso debemos eliminar la opción center y dejar solo center_vertical

Layout Gravity

El atributo layout_gravity afecta la gravedad del View pero con respecto a su padre. Continuando con el ejemplo anterior, si aplicamos layout_gravity="end" al botón, éste se irá al fondo del LinearLayout.




<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:gravity="center"
   android:orientation="vertical" >

   <TextView
       android:id="@+id/textView1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/hello_world" />
 
   <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="end"
       android:gravity="center"
       android:text="@string/hello_world" />

</LinearLayout>


Al evaluar este xml, podemos ver que el LinearLayout le estamos diciendo, hey todos tus hijos van en mi centro, sin embargo el hijo rebelde llamado botón quiere ir a la derecha, y por lo tanto le podemos decir, ok, alinéate a la derecha de tu papá usando tu propiedad layout_gravity.

jueves, mayo 07, 2015

Verificar si tenemos conexión en Android.

En unas líneas de código podemos verificar si tenemos conexión a internet. a través de la red o a través de WiFi. Recuerden agregar en el manifiesto los permisos


<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

luego, por favor no hagan un if - else para asignar un boolean cuando recibimos booleans.

public boolean checkConnectivity() {
 ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
 NetworkInfo mWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
 NetworkInfo mMobile = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
 return mWifi.isConnectedOrConnecting() || mMobile.isConnectedOrConnecting();
}

miércoles, mayo 06, 2015

Android’s HTTP Clients | Android Developers Blog

Android’s HTTP Clients | Android Developers Blog